Keycloak注销请求不会注销用户
Posted
技术标签:
【中文标题】Keycloak注销请求不会注销用户【英文标题】:Keycloak logout request does not log out user 【发布时间】:2017-07-06 20:08:23 【问题描述】:我目前正在使用 keycloak 2.5.0 做一个小项目 我已经设置了用户登录,现在我正在尝试实现页面范围的 logout 按钮。
正如documentation 所述,简称为路由 http://my-auth-server/auth/realms/master/protocol/openid-connect/logout?redirect_uri=http://application-root.com/ 为了简单起见,我使用了一个锚标记来发出这个 GET 请求。
如果我查看 Firefox 开发人员工具的“网络”选项卡,一切似乎都运行良好。我正在返回重定向请求的 302 状态代码。之后,应用程序成功请求 http://application-root.com/,状态码为 200,并将我重定向到此页面。
但是当我想再次请求锁定的内容(由 keycloak 保护的内容)时,它仍然可以访问。
但每当我在重定向后手动删除 JSESSIONID 和 KEYCLOAK_ADAPTER_STATE cookie 时,一切正常,并且我已正确注销。遗憾的是,我无法以编程方式删除这些 cookie,因为它们是 HttpOnly
这个请求的预期行为是什么?
我错过了什么吗?
有没有人经历过类似的事情?
感谢您的帮助
【问题讨论】:
我遇到了类似的问题,因为我没有将参数refresh_token
和 client_id
作为数据传递给 que 注销请求。即使不是 OK,注销端点也总是返回 200 OK。你能试试看会发生什么吗?无论如何,我在这里缺少一些信息。你在使用 Spring 适配器吗?你的配置是什么?
这个有什么答案吗?
@Ruben:根据docs,我看不出refresh_token
和client_id
是有效的参数...您是否了解更多信息?
@PeterV.Mørch 这是 3 年前的事了,很可能情况发生了变化,我的回答不再有意义。我指的是在 HTTP 正文请求中包含 refresh_token 和 client_id 以注销。此字段值在登录响应中提供。
【参考方案1】:
我使用 Keycloak 4.8.3 版本实现了注销。强制参数是 id token (id_token_hint)。可选参数是重定向 url (post_logout_redirect_uri)。 示例:
http://my-auth-server/auth/realms/master/protocol/openid-connect/logout?id_token_hint=eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJEY0gyNnl0OFV0OEJQTGxoR&post_logout_redirect_uri=http:%2F%2Fapplication-root.com%2F>
【讨论】:
这帮助我指明了正确的方向。值得一提的是,这是一个 GET 请求,可作为一种快速的反向通道注销策略。返回代码是干净的(200 OK),因此您可以依赖它来检查代码中的错误。 @BlakeNeal:你说“这帮助我指明了正确的方向”。你们中的任何人还记得那个正确的方向是什么吗?我尝试发送id_token_hint
和post_logout_redirect_uri
,结果相同。
@andrija: id_token_hint 看起来很短...它只是 id_token 的开头,您手动缩短了它,所以这里看起来不错,对吧?还是这是您发送的文字 GET?
是的,彼得。真实身份令牌更长。以上是关于Keycloak注销请求不会注销用户的主要内容,如果未能解决你的问题,请参考以下文章
Keycloak node.js 适配器不会在注销时使 connect.sid 会话 cookie 无效
在 React js 应用程序中使用 Keycloak 注销用户的问题
如何在基于 Keycloak/Spring 的应用程序中实现单点注销?