我正在尝试仅使用 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/