【发布时间】:2018-10-13 01:50:52
【问题描述】:
我试图从我的 Web 应用程序中了解反向通道注销的流程,但我发现文档令人困惑。我有一个在 JBoss EAP 中运行的 JEE 应用程序,带有 Java Servlet Filter Adapter(由于某些技术原因,我不能使用 EAP 适配器)。 documentation for logging out 说:
您可以通过多种方式退出 Web 应用程序。对于 Java EE servlet 容器,可以调用 HttpServletRequest.logout()。为了 其他浏览器应用程序,您可以将浏览器重定向到 http://auth-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri,如果您与浏览器进行 SSO 会话,则会将您注销。
Admin URL configuration 的文档说:
例如,反向通道注销的工作方式是: 1.用户从一个应用程序发出注销请求 2.应用程序向Keycloak发送注销请求 3. Keycloak服务器使用户会话失效 4. Keycloak 服务器然后使用与会话关联的管理 url 向应用程序发送反向通道请求 5. 当应用程序收到注销请求时,它会使相应的 HTTP 会话失效
所以根据我的理解,要么:
- 调用 HttpServletRequest.logout() 应该向 Keycloak 发送请求
- 到
http://auth-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri的 GET 应该以某种方式检测到 clientId(来自重定向 URI?)并向适当的反向通道发送请求
这两个选项似乎都不适合我。在这两种情况下,我都不会收到从 Keycloak 到我的 adminUrl 的回调。此外,在调用 Request.logout() 后,我仍然在 Keycloak Admin 中看到相同数量的活动会话。根据this SO post,它似乎可以工作,但我不确定我是否缺少配置或类似的东西。
我尝试使用 access_token 将 GET 发送到注销端点,但这也没有任何区别。
我对本文档有什么误解?我应该如何编写注销代码?
【问题讨论】:
标签: jakarta-ee keycloak