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

bar*_*maz 14 cross-domain single-sign-on jwt

我已经阅读了几篇关于sso的文章,但在我的脑海中找不到答案.我有一个如下情况:

场景:

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

题:

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

提前致谢

ped*_*ofb 10

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

跨域sso

脚本

  • abc将凭据发送到masterdomain,masterdomain对用户进行身份验证,然后创建一个签名的jwt,以便发送回abc.

  • 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上发布了一个带有JWT的开源项目跨域SSO

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