如何结合单点登录和无状态认证

时间:2015-08-04 22:06:35

标签: cookies single-sign-on logout stateless

我正在尝试添加基于SAML的单点登录/单点登录解决方案,以允许基于Web的应用程序的混合生态系统,给最终用户留下他们正在与单个应用程序交互的印象。

标准方法似乎是让IdP管理用户身份验证(建立IdP会话),然后根据需要让它在每个组件应用程序中建立会话的请求上发出签名的SAML签名。

可以使用SAML单点注销来处理注销,在注销时,IdP向每个服务提供商发出反向信道呼叫以使会话无效。

这适用于传统的基于状态会话的应用程序,但我正在尝试解决如何集成使用无状态JWT令牌代替服务器端会话的应用程序。

登录作品的工作方式相同,我们只是发出一个JWT来响应SAML登录,而不是建立一个传统的会话。只需删除cookie即可实现退出单个服务。

但有没有办法实现单点登录流程?我能看到的唯一方法是:

  • 在同一域(或至少子域)上托管所有无状态应用程序
  • 在注销时,删除该域的所有无状态身份验证Cookie,而不仅仅是单个应用程序的cookie
  • 清除这些cookie后,触发SAML单点注销流程以处理有状态的应用程序。

对此有更标准的方法还是总是手动滚动?

在我的研究中,我发现大量使用无状态令牌进行单点登录以及使用自行开发或SAML签名等标准使用单点登录状态完整应用程序的日志。但我找不到任何更简单或更标准的内容,而是我所说的在混合环境中将两者结合起来。

参考文献:

1 个答案:

答案 0 :(得分:1)

1 - 身份提供商如何让目标应用程序知道他们不应该允许用户登录

在SAML中,这是通过Single LogOut(SLO)实现的,SLO在协议中形式化。 IdP可以向目标应用发送SLO消息,然后目标应用可以采取措施。这将我们带到

2 - 如果目标应用程序出现“有效”状态,它将如何阻止用户登录? JWT令牌

当应用程序生成JWT令牌时,它需要以这样的方式执行此操作,以便稍后可以撤消此令牌。实际上,这意味着通过一些唯一标识符(例如JWT ID(jti))跟踪已发布的令牌。如果应用程序通过联系负责管理这些令牌的第三方生成令牌,那么您希望/坚持第三方令牌颁发者提供撤销令牌的方法。

如果应用程序(或第三方发行者)无法撤销令牌,那么您仍然可以通过让令牌过期来实现此目的。这是你的穷人的令牌失效解决方案。