钥匙斗篷注销请求
我想问一下是否有办法通过单个http请求注销。keycloak
我已经尝试过 POST 或 ,但结果始终是 ORIGIN-Problem。/protocol/openid-connect/logout
/tokens/logout
但是调用 ORIGIN 是在密钥保护中配置的,并且具有请求的登录工作正常。
这里有没有机会在不重定向的情况下注销或打开另一个窗口?
最好的问候和感谢!:)
我想问一下是否有办法通过单个http请求注销。keycloak
我已经尝试过 POST 或 ,但结果始终是 ORIGIN-Problem。/protocol/openid-connect/logout
/tokens/logout
但是调用 ORIGIN 是在密钥保护中配置的,并且具有请求的登录工作正常。
这里有没有机会在不重定向的情况下注销或打开另一个窗口?
最好的问候和感谢!:)
来自官方文档:
您可以通过多种方式注销 Web 应用程序。对于 Java EE servlet 容器,可以调用 。
HttpServletRequest.logout()
对于其他浏览器应用程序,您可以将浏览器重定向到 ,如果您与浏览器有 SSO 会话,则会将您注销。
http://auth-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri
要获取应用程序的确切 URL(主机、领域和redirect_uri配置),请执行以下操作:
如果您不是在创建自己的适配器,而是使用例如OpenID认证的库,您可能希望使用该库注销,因为否则,正如ch271828n所描述的那样,您可以从Keycloak注销,但保留会话和访问令牌...
在我的情况下,我使用的是openresty和lua-resty-openidc。
访问按键锁注销网址(如@aName的答案中所述)由lua在我们访问opts.logout_path后完成https://<keycloak-server>/auth/realms/<my-realm>/protocol/openid-connect/logout
https://<our-nginx-server>/service/logout
因此,在正确设置所有内容后,我们所要注销的就是在 处使用 OpenID 客户端的注销。这将破坏会话,并从客户端和密钥保护中注销我们。https://<our-nginx-server>/service/logout
我想我必须设置为,还要注意,从我的实验中,由于某种原因,设置可能会导致用户由于重定向而无法注销。opts.revoke_tokens_on_logout
true
redirect_after_logout_uri
以下是我需要为nginx.conf提供什么才能使这项工作的示例....
location /myservice/ {
access_by_lua_block {
local opts = {
redirect_uri_path = "/myservice/auth",
discovery = "https://<keycloak-server>/auth/realms/<my-realm>/.well-known/openid-configuration",
client_id = "<my-client-id>",
client_secret = "<the-clients-secret>",
logout_path = "/service/logout",
revoke_tokens_on_logout = true,
session_contents = {id_token=true} -- this is essential for safari!
}
-- call introspect for OAuth 2.0 Bearer Access Token validation
local res, err = require("resty.openidc").authenticate(opts)
if err then
ngx.status = 403
ngx.say(err)
ngx.exit(ngx.HTTP_FORBIDDEN)
end
}
# I disbled caching so the browser won't cache the site.
expires 0;
add_header Cache-Control private;
proxy_pass http://my-service-server.cloud:port/some/path/;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}