首页 > 解决方案 > SSO 与 JWT 和多个用户帐户 + SPA

问题描述

我有两个 Web 应用程序,它们是一个SPA app.domain1.com,其中有他自己的 APIapi.domain1.comapp.domain2.com目标是简化从一个应用程序到另一个应用程序的切换,而无需用户通过重新输入密码来登录每个应用程序。我只是一个应用程序的所有者,所以不可能将它们放在反向代理之后。

例子 :

app.domain2.com重定向到app.domain1.com/connect/{JWT}-> app.domain1.comSPA 提取 JWT 并通过 ajax 将其发送到api.domain1.com验证和登录。

我一直在为这些寻找 OAuth2 和 OpenID Connect,但 OAuth2 更多的是关于资源访问的委派而不是身份验证,并且 OpenID Connect 需要一个身份提供者,这似乎与我的用例不兼容,其中每个应用程序都有自己的身份验证机制并且我无法添加中央认证服务器。理想情况下,我想遵守标准协议。

我以为我可以在每个应用程序上公开一个端点 GET /connect/{JWT} 。JWT 可以包含一个可以识别用户帐户的电子邮件,app.domain1.com 和 app.domain2.com 可以共享用于验证 JWT 未被篡改且有效期较短的密钥。

此端点验证 JWT,验证用户是否匹配 JWT 中的电子邮件并登录用户。

我不确定这些过程的安全注意事项,是否还有其他选择?

谢谢你的帮助。

标签: authenticationoauth-2.0jwtsingle-sign-onopenid-connect

解决方案


在我看来,您应该选择 OIDC。该协议专为您在此处描述的功能而设计。您可以让其中一个应用程序充当 IdP,而另一个应用程序将成为依赖方。这取决于您为应用程序使用的技术,但在某些语言中,有一些库可以将您的应用程序变成 IdP。

您可以考虑一些通用协议来使联合登录工作,但最好使用标准。这样您就不必怀疑您的解决方案的安全含义是什么 - 您在规范本身中描述了 OIDC 的安全注意事项。


推荐阅读