You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LinkedIn作为IDP时logout_token签发者不被Keycloak接受

Keycloak + LinkedIn OIDC 登出与离线会话撤销问题解决

核心逻辑澄清

你搞反了/protocol/openid-connect/logout/backchannel-logout端点的调用方:

  • 你配置的「Backchannel logout URL」是Keycloak主动通知你的应用用户登出的地址,这部分你之前的操作是对的。
  • 而logout/backchannel-logout是身份提供商(LinkedIn)用来通知Keycloak用户在IDP侧登出的端点——所以Keycloak才会要求这个请求里的logout_token issuer必须是LinkedIn,因为它本来就该由LinkedIn签发。

你拿着Keycloak自己发的token去调用这个端点,自然会触发验证失败。

为什么「Backchannel logout revoke offline sessions」没生效?

这个选项的触发条件是:Keycloak收到LinkedIn发来的包含revoke_offline_access事件的Logout Token。但问题是——LinkedIn目前根本不支持OIDC Backchannel Logout,你查不到相关文档就是明证,它没实现这个功能,自然不会给Keycloak发这个token。

替代解决方案

既然LinkedIn不支持,要实现离线会话撤销,换这两种思路:

1. 应用登出时主动调用撤销端点

当用户在你的应用触发登出(调用Keycloak的/protocol/openid-connect/logout)时,额外调用Keycloak的令牌撤销端点,传入用户的离线refresh token:

POST /auth/realms/{你的领域名}/protocol/openid-connect/revoke
Content-Type: application/x-www-form-urlencoded

client_id=你的客户端ID&client_secret=你的客户端密钥&token=用户的离线Refresh Token

这样就能直接撤销对应的离线会话。

2. 自定义Keycloak事件监听器

写一个Keycloak SPI扩展,监听用户的LOGOUT事件,当事件触发时,自动删除该用户的所有离线会话。核心是调用Keycloak内部的OfflineSessionProvider接口来实现会话清理,适合需要全局自动处理的场景。

总结

  • logout/backchannel-logout这条路走不通,因为LinkedIn不支持给Keycloak发Backchannel Logout Token。
  • 要实现离线会话撤销,只能通过主动调用revoke端点或自定义事件监听器来替代。

内容的提问来源于stack exchange,提问作者Guenther Mahr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 09:35:03