我们提供多种在线服务。我们需要开发一个系统,当用户从一项服务(在 domain1.com
上)转移到另一项服务(在 domain2.com
上)时,该系统可为用户提供快速/简单的体验>).
是否有一种安全可靠的方法可以让用户在转移到新服务后自动登录?
如果下面的解决方案完全不安全/错误,请对我大喊大叫。
我们正在考虑采用与许多在线密码恢复服务提供的系统类似的系统 - 他们会通过电子邮件收到一个带有唯一哈希值的链接,该哈希值会过期,允许他们更改密码。
domain1.com
站点将生成一个唯一的哈希值并将其存储在数据库中,该哈希值与过期日期时间字段一起链接到用户。
用户将转移到 domain2.com/auto/?hash=d41d8cd98f00b204e9800998ecf8427e
domain2.com
接下来将使用哈希向 domain1.com
发出请求,以获取有关用户的信息。然后,domain1.com
将从数据库中删除哈希值。 domain2.com
将使用户登录并设置 cookie 等。
基于 OpenID 或 OAuth 的东西能否达到相同的结果?
最佳答案
单点登录 (SSO) 在概念上非常简单。
- 用户点击
domain1.com
。 domain1.com
发现没有 session cookie。domain1.com
重定向到sso.com
sso.com
显示登录页面并获取凭据sso.com
为用户设置 session Cookiesso.com
然后重定向回domain1
的特殊网址(如domain1.com/ssologin
)ssologin
URL 包含一个基本上由sso.com
“签名”的参数。它可以像使用共享 key 对登录 ID 进行 Base64 加密一样简单。domain1.com
获取加密 token ,对其进行解密,然后使用新的登录 ID 登录用户。domain1
为用户设置 session Cookie。
现在,下一个案例。
- 用户点击
domain2.com
,它跟随domain1
并重定向到sso.com
sso.com
已有用户的 Cookie,因此不会显示登录页面sso.com
使用加密信息重定向回domain2.com
domain2.com
登录用户。
这就是其工作原理的基础。您可以使其更健壮,功能更丰富(例如,这是SSOn,但不是SSOff,用户可以“注销”domain1
) >,但仍登录到 domain2
)。您可以使用公钥来签署凭据,您可以请求从 SSO 服务器传输更多信息(如授权权限等)。您可以进行更密切的集成,例如域定期检查用户是否仍然拥有 SSO 服务器的权限。
但是使用重定向通过浏览器进行cookie 握手是所有这些 SSO 解决方案的关键基础。
关于security - 跨域登录 - 当用户从一个域转移到另一个域时如何自动登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/342378/