使用JWT进行单点登录(SSO)

时间:2016-11-10 12:01:54

标签: cross-domain single-sign-on jwt

我读过几篇关于sso的文章,但在我的脑海里找不到答案。 我的情况如下:

情境:

  • 我的公司想要使用jwt的sso机制。
  • 公司有两个不同的域名,如 abc.com abc xyz.com xyz
  • 还有一个 masterdomain 来管理客户端身份验证。
  • 用户 X 首先想要登录 abc
  • abc masterdomain 发送凭据, masterdomain 对用户进行身份验证,然后创建已签名的jwt以便发送回 abc
  • abc 将此jwt保存在Cookie中。
  • 如果在同一台计算机上尝试登录 abc 一段时间后,系统不会要求提供凭据并自动登录用户。

问题:

如果用户尝试在 xyz 域中打开页面,系统如何理解用户之前登录过的内容?我的意思是 xyz 域无法访问具有jwt的 abc 的cookie。应将哪些信息发送到 xyz ,表明用户 X 正在尝试登录?

提前致谢

1 个答案:

答案 0 :(得分:8)

您可以使用iframe将JWT身份验证令牌存储在连接到主页的中间域的cookie / localStorage中

cross domain sso

方案

  
      
  • abc masterdomain 发送凭据, masterdomain 对用户进行身份验证,然后创建已签名的jwt以便发送回abc。< / p>

  •   
  • abc masterdomain 将此jwt保存在Cookie中。

  •   
  • 如果在同一台计算机上尝试登录 abc ,系统不会要求提供凭据并自动登录用户。

  •   

最后,当用户进入第二个域 xyz 时,使用iframe从 masterdomain 存储中恢复jwt,并自动登录用户

CORS 不是问题,因为 masterdomain.com 可以访问其存储空间,并且如果识别出来源和目的地,则允许iframe之间的通信(请参阅http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage

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