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

时间:2011-07-04 19:12:51

标签: 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项目中的视图,该视图执行以下操作:

  • 检索site.com的session_id值(来自cookie)
  • 通过发出以下请求验证session_id:site.com/validate/[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模型将本地auth用户链接到主auth表的id。

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

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

实施和安全似乎很简单,但在实施之前我想要一些意见。你觉得怎么样?

1 个答案:

答案 0 :(得分:0)

我不自称是网络安全专家,但我过去做过类似的事情。只要您正确设置了cookie域(您声称正在进行),我就不会发现任何安全问题,特别是因为这两个站点位于同一个域中。

如果你真的想要安全,我想你可以建立自己的OAuth门户网站,但坦率地说这似乎有些过分。