单页应用程序 (SPA) 的单点登录 (SSO) 解决方案/架构

Far*_*way 6 single-sign-on oauth-2.0 single-page-application openid-connect auth0

我研究 SPA 的 SSO 解决方案已经有一段时间了。有很多解决方案存在细微的差别,同时我还发现并不是每个人对 SSO 都有相同的理解,并且没有多少针对 SPA 的 SSO 既定模式。因此,我并不要求详细的设计/架构,只是尝试看看这个主题是否有任何常见的做法。

SSO 意味着什么?

  1. 我们正在开发一些新的 SPA(也可能是移动和平板电脑应用程序),它们将部署在不同的服务器中并具有不同的域。
  2. 我们还有一个中央 IdP(authServer),其中将存储所有用户身份。
  3. 一旦我登录到SPA1并单击一个按钮,将我带到SPA2(或可能是 SPA3SPA4),我不必输入用户凭据,并且将自动登录。

SPA有什么区别?(与常规网络应用程序相反)

我研究了一些解决方案,甚至是像 SAML 这样的旧解决方案(只是想了解一下 SSO..)。我当前的候选者是OpenId Connect,但后来我意识到 SPA 的差异,如果我的理解是正确的话:与常规 Web 应用程序不同,SPA 通常没有(或者我们尝试没有)后端服务器。SPA 所拥有的只是一个提供静态页面以及脚本、样式表和图像的服务器。

现在问题来了:

OpenId Connect基于OAuth2 授权代码授予类型,这意味着:

  1. 如果我想让每个 SPA 正常工作,我需要一个类似后端代理的模块。
  2. 我使用另一种解决方案来执行客户端 SSO,例如auth0 提供的解决方案
  3. 我还没有找到任何其他解决方案/示例

我的问题:

对于上述第1点,我的理解正确吗?是不是不要让 SPA 像常规 Web 应用程序那样拥有后端代码?

对于上面的第 2 点,这听起来像是一个解决方案,但这与OAuth2 隐式授权类型有什么本质上的不同?

并且,还有其他我应该知道但尚未探索的解决方案(框架、协议等)吗?

Han*_* Z. 1

除了使用授权代码授予的基本客户端配置文件之外,OpenID Connect 还有一个基于 OAuth 2.0 隐式授权构建的隐式客户端配置文件。此配置文件允许将令牌直接传递到浏览器内/Javascript 客户端,而不涉及后端。