基于Cookie的SSO

fre*_*ngo 20 single-sign-on

如何在没有sso服务器的情况下实现基于cookie的单点登录?我想在浏览器上只使用cookie共享跨多个应用程序登录的用户.

在我看来它的工作方式如下:

  • 用户登录应用程序
  • 应用程序验证凭据,然后在存储用户名的浏览器上设置cookie(可以用私钥编码)
  • 如果用户打开另一个应用程序,它会搜索cookie并读取值上的用户名(使用键解码字符串)

在该解决方案中,用户可以看到(另一个用户的)浏览器cookie并且获取用户名的字符串.然后他可以将它添加到自己的cookie上(不好!).

有一些安全的方法来做到这一点?使用基于时间戳的控件或类似的东西?

提前致谢.

再见

PS我知道我的英语不是很好......对不起!

Ste*_*all 15

这是不可能的.Cookie对每个域都是唯一的,一个域无法读取其他域的Cookie.

  • 如果域具有共同的主域,则可以共享cookie.`foo.example.com`和`bar.example.com`可以共享一个`.example.com` cookie. (21认同)
  • 浏览器不允许这样做.想想有多危险 - 恶意网站能够为您的网上银行网站设置cookie ... (3认同)

ped*_*ofb 9

我认为答案来得有点晚,但也许我可以帮助某人。

您可以在中间域中使用 iframe 连接到主页的 cookie / localStorage

跨域单点登录

1) 登录 您的任何域中的登录表单通过事件 (postMessage) 将标识令牌存放在 sso.domain.com 上的 cookie 中 2) 验证域 1 和域 2 包括一个指向 sso.domain.com 的 iframe,它读取令牌并通知主页

为了简化开发,我们最近在https://github.com/Aralink/ssojwt发布了一个带有 JWT 的跨域 SSO


小智 8

有一个简单的解决方案,不使用sso服务器,但不使用1个常见的cookie,因为我们知道cookie不在域之间共享.

当用户在site-a.com上进行身份验证时,您在site-a.com域上设置了cookie.然后在site-b.com上,链接来自site-a.com的动态javascript,由有权访问创建的cookie的服务器端脚本(php等)生成,然后在site-b.com上复制相同的cookie在客户端使用js.现在两个站点都具有相同的cookie,而无需要求用户重新登录.

您可以使用site-a和site-b都知道如何解码的方法对cookie值进行加密/编码,以便site-b能够验证他的cookie副本.使用一个共同的秘密,没有它就不可能编码或解码.

您看到在site-b.com的第一页加载时,cookie不存在,因此如果您认为有必要,您可能希望在设置cookie后重新加载页面.

  • 会话cookie应始终具有仅HTTP属性集,以防止它们通过JavaScript读取.这可以防止会话被XSS或JavaScript注入漏洞窃取.启用该属性后,此解决方案将无法运行. (3认同)
  • 存储可通过javascript访问的会话ID cookie具有巨大的安全风险。这样的cookie应该是“仅HTTP” (2认同)