【发布时间】:2015-10-27 12:05:04
【问题描述】:
我正在尝试添加基于 SAML 的单点登录/单点注销解决方案,以允许基于 Web 的应用程序的混合生态系统,从而给最终用户留下他们正在与单个应用程序交互的印象。
对此的标准方法似乎是让 IdP 管理用户身份验证(建立 IdP 会话),然后根据需要发出签名的 SAML 登录请求以在每个组件应用程序中建立会话。
可以使用 SAML 单点注销来处理注销,其中,在注销时,IdP 向每个服务提供商发出反向通道调用以使会话无效。
这适用于传统的基于有状态会话的应用程序,但我正在尝试研究如何集成使用无状态 JWT 令牌代替服务器端会话的应用程序。
登录部分的工作原理相同,我们只是发出 JWT 以响应 SAML 登录,而不是建立传统的会话。只需删除 cookie 即可退出单个服务。
但是有什么方法可以实现单点注销流程?我能看到的唯一方法是:
- 在同一域(或至少子域)上托管所有无状态应用程序
- 退出时,删除该域的所有无状态身份验证 cookie,而不仅仅是单个应用程序的一个
- 清除这些 cookie 后,触发 SAML 单点注销流程以处理有状态的应用程序。
有没有更标准的方法来解决这个问题,还是总是手动滚动?
在我的研究中,我发现大量使用无状态令牌进行单点登录,以及使用本地或 SAML Sign Off 等标准在有状态的完整应用程序中使用单点登录的日志。但我找不到比我所描述的在混合环境中将两者结合起来更简单或更标准的方法了。
参考资料:
- Single sign off using OAuth 2 - 在滥用 OAuth 时,情况与我所描述的情况类似,但通过建立服务器端状态来验证 OAuth 令牌以实现签名来解决
- Transparent user session over several sites (single sign-on + single sign-off) & How to do stateless (session-less) & cookie-less authentication? 很好地描述了我渴望启用的那种无状态身份验证流程,但似乎依赖于共享的服务器端令牌存储或仅依赖于超时而不是显式注销
【问题讨论】:
标签: cookies single-sign-on logout stateless