2016-11-10 83 views
6

我已阅读了几篇关于sso的文章,但在我的脑海中找不到答案。 我有一种情况如下图所示:使用JWT的单点登录(SSO)

场景:

  • 我公司希望有使用JWT SSO机制。
  • 公司有2个不同的结构域等abc.comABCxyz.comXYZ
  • 还有一个masterdomain管理客户端身份验证。
  • 用户X想要先登录abc
  • ABC发送凭据masterdomainmasterdomain用户进行身份验证,然后才能返回给ABC创建签名JWT。
  • abc将此jwt保存在cookie中。
  • 经过一段时间,如果在同一台计算机上尝试登录abc,系统不会要求提供凭据并自动登录该用户。

问:

如果用户试图在XYZ域打开一个页面,系统怎样理解用户的loggedIn过吗?我的意思是xyz域名无法到达abc的cookie,它有jwt。什么信息应该发送到xyz这表明用户X正在尝试登录?

在此先感谢

回答

3

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

cross domain sso

方案

存储在cookie中智威汤逊认证令牌
  • abc发送凭证到masterdomainmasterdomain验证用户然后创建一个签名的jwt为了发送回abc。

  • abcmasterdomain将此jwt保存在cookie中。

  • 如果登录ABC试图在同一台计算机上一段时间后,系统不要求提供信用凭证,并自动登录用户。

最后,当用户在第二域中进入XYZ,JWT是从masterdomain存储使用的IFRAME回收,并且自动登录用户

CORS不是问题,因为masterdomain.com有权访问其存储和iframe之间的通信是允许的,如果起源和目的地被识别(见http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage

为了简化开发,我们最近发布了一个开源项目跨域SSO与智威汤逊https://github.com/Aralink/ssojwt

+0

怎么样的安全,如果有一个钓鱼网站,用户输入,用户将失去访问令牌? ** ssojwt **纠正这种情况? – Vunb

+1

@Vunb,iframe'postmessage'函数要求必须事先授权源站点和目标站点,否则浏览器将不允许消息传递,因此攻击者不能访问共享令牌,因为它不在白名单中 – pedrofb