您可以使用多种方式登出Web应用程序。对于Java EE Servlet容器,您可以呼叫HttpServletRequest.logout()。 对于其他浏览器应用程序,您可以将浏览器重定向到http://auth-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri,如果您与浏览器之间存在SSO会话,则会将您注销。 要获取应用程序的确切URL(主机、领域和redirect_uri配置):
2条答案
按热度按时间xqkwcwgp1#
摘自官方文件:
您可以使用多种方式登出Web应用程序。对于Java EE Servlet容器,您可以呼叫
HttpServletRequest.logout()
。对于其他浏览器应用程序,您可以将浏览器重定向到
http://auth-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri
,如果您与浏览器之间存在SSO会话,则会将您注销。要获取应用程序的确切URL(主机、领域和redirect_uri配置):
bis0qfac2#
如果您没有创建自己的适配器,而是使用OpenID认证的库,您可能希望使用该库注销,因为否则,如ch 271828 n所述,您可能会从Keycloak注销,但会保留会话和访问令牌...
在我的例子中,我使用的是openresty和lua-resty-openidc
访问keycloack注销url
https://<keycloak-server>/auth/realms/<my-realm>/protocol/openid-connect/logout
(如@aName的答案中所详细描述的)是在我们访问https://<our-nginx-server>/service/logout
处的opts.logout_path之后由lua完成的因此,在正确设置所有内容后,我们要做的就是注销我们的OpenID客户端(
https://<our-nginx-server>/service/logout
)。这将破坏会话,并从客户端和Keycloak注销我们。我想我必须将
opts.revoke_tokens_on_logout
设置为true
,另外请注意,根据我的实验,由于某种原因,设置redirect_after_logout_uri
可能会导致用户由于重定向而无法注销。下面是一个例子,说明我需要nginx.conf来完成这项工作。