Keycloak:登出后,仍然可以使用访问令牌
2021-4-21 11:34:46
收藏:0
阅读:195
评论:1
我有一个 nginx/openresty 客户端连接到 keycloak 服务器进行 openid 授权。 我使用 lua-resty-openidc 允许代理后面的服务访问。
用户可以在
https://<my-server>/auth/realms/<real-name>/account
访问他的个人资料,并可以通过
https://<my-server>/auth/realms/<real-name>/protocol/openid-connect/logout
来登出。
问题是,即使在登出后,用户仍然可以访问服务器后面的服务,似乎他从 keycloak 得到的访问令牌仍然有效或者什么的...... 这也是其他用户观察到的行为,例如 这个关于如何从 keycloak 登出的问题 中 ch271828n 的评论。
我该如何确保在登出后,用户将无法再次访问直到重新登录?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我需要检查[lua源代码](https://github.com/zmartzone/lua-resty-openidc/blob/master/lib/resty/openidc.lua),但是我认为我已经确定了登出行为:Lua-resty-openidc建立会话,当检测到特定的URL访问时终止会话(由“opts.logout_path”控制,我们需要将其设置为服务路径中的地址,例如... /service/logout)
本质上,有两个需要单击的URL,一个用于keycloack注销,另一个用于openresty会话注销。访问keycloack注销网址
https://<keycloak-server>/auth/realms/<my-realm>/protocol/openid-connect/logout是由lua完成的,之后我们访问opts.logout_path在https://<our-nginx-server>/service/logout因此,正确设置所有内容后,我们只需要单击“https:///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"; }