Cookies 如何将单点注销和无状态身份验证结合起来

Cookies 如何将单点注销和无状态身份验证结合起来,cookies,single-sign-on,logout,stateless,Cookies,Single Sign On,Logout,Stateless,我正在尝试添加一个基于SAML的单点登录/单点注销解决方案,以允许一个混合的基于web的应用程序生态系统,给最终用户留下他们正在与单个应用程序交互的印象 实现这一点的标准方法似乎是让IdP管理用户身份验证(建立IdP会话),然后根据需要发出已签名的SAML登录请求,以在每个组件应用程序中建立会话 可以通过使用SAML Single Sign Off来处理签准,其中,在签准时,IdP向每个服务提供商发出反向通道调用以使会话无效 这适用于传统的基于状态会话的应用程序,但我正在尝试解决如何集成使用无状

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

实现这一点的标准方法似乎是让IdP管理用户身份验证(建立IdP会话),然后根据需要发出已签名的SAML登录请求,以在每个组件应用程序中建立会话

可以通过使用SAML Single Sign Off来处理签准,其中,在签准时,IdP向每个服务提供商发出反向通道调用以使会话无效

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

sign-on部分的工作原理是等价的,我们只是发出一个JWT来响应SAML sign-on,而不是建立一个传统的会话。只需删除cookie即可注销单个服务

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

  • 在同一域(或至少子域)上承载所有无状态应用程序
  • 注销时,删除该域的所有无状态身份验证cookie,而不仅仅是单个应用程序的cookie
  • 清除这些cookie后,触发SAML单点注销流以处理状态完整的应用程序
是否有更标准的方法来实现这一点,或者这始终是手工完成的

在我的研究中,我遇到了大量使用无状态令牌进行单点登录的情况,以及使用本地或SAML sign Off等标准的单点注销状态完整应用程序的使用日志。但我找不到任何比我所描述的在混合环境中结合两者更简单或更标准的东西

参考资料:

  • -当滥用OAuth时,与我描述的情况类似,但通过建立服务器端状态来验证OAuth令牌以实现注销来解决
  • &很好地描述了我渴望启用的无状态身份验证流,但似乎依赖于令牌的共享服务器端存储,或者仅仅依赖于超时,而不是显式注销

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

在SAML中,这是通过协议中形式化的单次注销(SLO)实现的。IdP可以向目标应用发送SLO消息,然后目标应用可以采取行动。这使我们想到

2-目标应用程序如何防止用户在使用“有效”JWT令牌时登录

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


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

我不太担心令牌继续有效,因为我不(过度)担心撤销,除非用户请求撤销。我主要担心的是,当用户在共享终端上“注销”时,使用相同浏览器的用户无法重新访问其会话。虽然您的答案确实解决了吊销问题,但它需要有效会话标识符的共享存储来验证令牌并允许SAML注销,这正是我希望避免的。谢谢你的回答,你验证了我的想法,没有共享状态,选择是有限的。