【问题标题】:Implementation of sso with django auth. Is this safe?使用 django auth 实现 sso。这安全吗?
【发布时间】:2011-09-28 08:25:36
【问题描述】:

我正在尝试仅使用 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 项目中的一个视图,该视图执行以下操作:

  • 检索 site.com 的 session_id 值(来自 cookie)
  • 通过向以下网址发出请求来验证 session_id:site.com/validate/[session_id]/
  • 如果为 False,则重定向到 site.com/login?next=[...]
  • 如果为真,请求用户数据到: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(或任何其他子域)可以保留自己的个人资料信息,而不会干扰任何事情。

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

【问题讨论】:

    标签: python django django-authentication


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-12
      • 2018-10-26
      • 2010-12-21
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      相关资源
      最近更新 更多