python - 使用 django auth 实现 sso。这样安全吗?

标签 python django django-authentication

我正在尝试仅使用 django auth 实现单点登录。

让我们假设两个 django 项目,在不同的子域上:site.com(auth) 和 app1.site.com(app1) site.com 中的 auth 表是 master。 site.com 处理:登录、注销、帐户注册等。

site.com 将 SESSION_COOKIE_DOMAIN 设置为 .site.com 以允许其被子域读取

app1 会将 login_url 设置为 app1 项目中的一个 View ,它执行以下操作:

  • 检索 site.com 的 session_id 值(来自 cookie)
  • 通过向 site.com/validate/[session_id]/发出请求来验证 session_id
  • 如果为 False,则重定向到 site.com/login?next=[...]
  • 如果为 True,请将用户数据请求到:site.com/attributes/[session_id]/
  • site.com/attributes/提供包含所有用户值的字典,使用共享 SSO_KEY 加密(加密方式与 django 编码和解码 session_id 的方式相同)

现在,app1 有一个 SSO_User 模型,它有两个字段,一个用户模型的外键和一个整数字段。 SSO_User 模型将本地身份验证用户链接到主身份验证表的 ID。

使用从 site.com 检索到的 ID,我们检查现有本地用户的 SSO_User,如果为真,我们只需更新值并登录;如果不存在,我们创建用户和 SSO_User 并登录。

app1(或任何其他子域)可以保留自己的个人资料信息,而不会干扰任何内容。

看起来实现起来很简单而且安全,但在实现之前我想听听一些意见。你怎么看?

最佳答案

我不自称是网络安全专家,但我过去做过类似的事情。只要您正确设置 cookie 域(您声称这样做),我真的看不到任何安全问题,特别是因为两个站点都在同一个域中。

如果您真的想要安全起见,我想您可以设置自己的 OAuth 门户或其他东西,但坦率地说,这似乎有些矫枉过正。

关于python - 使用 django auth 实现 sso。这样安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6575280/

相关文章:

django - 截断中间的文本,Django 模板标签

python - 按 json 中的计数排序

django - Python Social Auth为不同用户复制电子邮件

django - 默认创建非事件用户(is_active default False)

python - 使用相同的 'for' 循环和 'all()' 函数会产生不同的结果

python - 调试 Python 项目中使用的崩溃 C 库

python - 合并 ndarray 图像

django - 为 Django 推送通知注册设备

Django 在每个用户的 UI 中隐藏帖子(对象)而不影响主模型

python - Nose 测试运行器找到除标签之外的所有测试