一段时间以来,我一直在研究 SPA 的 SSO 解决方案。有很多细微差别的解决方案,但我也发现并不是每个人都对 SSO 有相同的理解,而且针对 SPA 的 SSO 的既定模式也并不多。因此,我不是要求详细的设计/架构,而只是尝试看看在这个主题上是否有任何常见的做法。
我对 SSO 意味着什么?
- 我们正在开发一些新的 SPA(也可能是移动和平板电脑应用程序),它们将部署在不同的服务器上并具有不同的域。
- 我们还有一个中央 IdP (authServer) 将存储所有用户身份。
- 一旦我登录SPA1并单击将我带到SPA2(或SPA3,SPA4,可能)的按钮,我不必输入用户凭据,并且会自动登录。
SPA有什么区别?(相对于常规的网络应用程序)
我查看了一些解决方案,甚至是像 SAML 这样的旧解决方案(只是想了解 SSO ..)。我目前的候选人是OpenId Connect,但后来我意识到 SPA 的不同之处,如果我的理解是正确的:与常规 Web 应用程序不同,SPA 通常没有(或者我们尽量没有)后端服务器。SPA 所拥有的只是一个服务于静态页面以及脚本、样式表和图像的服务器。
现在问题来了:
OpenId Connect基于OAuth2 授权代码授权类型,这意味着:
- 如果我想让每个 SPA 工作,我需要一个类似后端代理的模块。
- 我使用不同的解决方案来执行客户端 SSO,例如auth0 提供的一个
- 我还没有找到任何其他解决方案/示例
我的问题:
对于上述第 1 点,我的理解是否正确?不要让 SPA 像普通的 web 应用程序那样拥有后端代码会更好吗?
对于上述第 2 点,这听起来像是一个解决方案,但这与OAuth2 隐式授权类型有何本质不同?
而且,还有其他我应该知道但尚未探索的解决方案(框架、协议等)吗?