使用Identity Broker和Identity Provider使用JWT令牌实现注销

时间:2019-03-12 17:06:09

标签: single-sign-on spring-security-oauth2 logout keycloak

我在弄清楚如何使用Identity Broker(密钥斗篷)和Identity Provider(使用Spring Boot / Security OAuth编写)进行正确注销时遇到了麻烦。

这是流,使用反向通道注销:

  1. 用户单击注销按钮。这会向标准Keycloak注销端点发出请求。
  2. Keycloak调用我的身份提供程序注销端点(这是反向通道部分; frontchannel将让Keycloak在此处返回302并导致浏览器调用IdP注销页面)。它传递了我的IdP颁发给它的OIDC IdToken。
  3. IdP采取以下措施:
    1. 使会话无效
    2. 未设置JSESSIONID cookie ...但是,由于反向通道配置,此cookie是Keycloak的JSESSIONID,而不是我的浏览器
    3. 我可以在此处使用IdToken进行某些操作,但由于它是JWT,因此目前尚未存储。
  4. IdP将302返回登录页面
  5. Keycloak将302返回登录页面

这一切似乎正常。但是,如果直接进入受安全保护的页面,则无需重新登录就可以访问它。这是因为从浏览器到IdP的会话从未失效。当我的IdP看到它具有来自浏览器的会话时,它使用最初输入的登录凭据(UsernamePasswordAuthToken),并在其oauth / authorize端点重新发出身份验证代码,并重定向到Keycloak。然后,Keycloak像往常一样使用此身份验证代码,并将其交换为令牌,然后颁发自己的令牌。

问题:  1.我想如果我能够使从浏览器到IdP的会话无效,那么我可以使所有这些工作正常。可能是通过覆盖Spring Security OAuth中的AuthorizationEndpoint。但这听起来有点像骇客。  1.我应该使用前通道注销而不是后通道注销吗?我对此还有其他问题(即Keycloak如何知道我的IdP发行的令牌无效)

0 个答案:

没有答案