“会话没有所需的客户端”是什么意思?

Ken*_*del 6 keycloak

我有一个关于 Keycloak 4.8.3 的问题。

我正在使用 Spring 安全适配器通过 keycloak 和启用的登录功能来保护我们的 Web 应用程序:记住我。

用户从浏览器登录,然后重定向回 Web 应用程序。

然后,我们的 Web 应用程序使用 KeycloakRestTemplate 在内部调用另一个 Keycloak 安全的 REST-API 端点,因为我们还需要使用 Web 应用程序的同一用户来授权这些调用。

重点是:我想将授权令牌用于另一个 REST-API 服务方法。

一段时间后,REST-API 调用失败并显示以下错误消息:

ERROR RefreshableKeycloakSecurityContext Refresh token failure status: 400 {"error":"invalid_grant","error_description":"Session doesn't have required client"}
Run Code Online (Sandbox Code Playgroud)

keycloak 日志文件包含以下警告:

17:25:51,929 WARN  [org.keycloak.events] (default task-1) type=REFRESH_TOKEN_ERROR, realmId=EHotel, clientId=IBE, userId=f:8db533c4-9733-48d4-8b30-28a50954b7ad:khaendel, ipAddress=192.168.1.76, error=invalid_token, grant_type=refresh_token, refresh_token_type=Refresh, refresh_token_id=9fba841f-54bb-4c81-8f7b-6a7e1c5ab92e, client_auth_method=client-secret
Run Code Online (Sandbox Code Playgroud)

我无法准确预测这种情况何时发生,大概是 15 分钟后或一小时后。令牌过期设置如下: SSO 会话空闲:15 分钟 SSO 会话最长:15 分钟 SSO 会话空闲“记住我”:1 天 SSO 会话最长“记住我”:1 天 访问令牌有效期:5 分钟

错误消息(会话没有所需的客户端)是什么意思?

我究竟做错了什么?

远程调试显示:看来,在 keycloak 服务器上涉及客户端会话缓存(InfinispanUserSessionProvider),一段时间后会丢失信息。

我希望使用 keycloak 令牌对另一个 REST-API 服务进行身份验证,该服务的用户与我们的安全 Web 应用程序相同。但由于错误消息,刷新令牌的使用时间不能与 SSO 会话一样长。

Ken*_*del 2

Keycloak 开发团队已确认,这是当前版本的 keycloak 4.8.3 中的一个错误。客户端会话在较长的“记住我”会话期间必须有效。该错误将在下一个版本中修复。Jira Ticket 在撰写本文时尚不可用。

  • 您知道哪个版本解决了这个问题吗?这将非常有帮助:) (2认同)
  • 我在最新版本的 Keycloak (18.xx) 中遇到了完全相同的问题,所以如果这是一个错误,那么它尚未修复。 (2认同)