security - 跨域登录 - 当用户从一个域转移到另一个域时如何自动登录

标签 security authentication dns single-sign-on

我们提供多种在线服务。我们需要开发一个系统,当用户从一项服务(在 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 Cookie
  • sso.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/

相关文章:

security - 防止Chef客户端访问服务器上的所有数据

c - gethostbyname 双网络接口(interface),选择使用哪一个

dns - 是什么阻止任何人创建自己的顶级域名?

c# - 使用 Owin 时的自定义错误页面

Java:如何检查计算机是否已经被更改

python - 在 python 中批量/批量 DNS 查找?

security - 我的网站被黑了..我该怎么办?

c# - 如何使用 UniObjects for .net 保护 UniData session

ios - 钥匙串(keychain)中的密码 - 人们忘记了密码

reactjs - 处理前端的后端错误状态