首页 > 解决方案 > “会话没有必需的客户端”是什么意思?

问题描述

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

我正在使用 spring 安全适配器通过 keycloak 和启用的登录功能来保护我们的 web 应用程序:remember-me。

用户从浏览器登录并重定向回 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"}

并且 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

我无法预测究竟什么时候会发生这种情况,大概是在 15 分钟或一个小时之后。令牌到期设置如下: SSO 会话空闲:15 分钟 SSO 会话最长:15 分钟 SSO 会话空闲记住我:1 天 SSO 会话最长记住我:1 天访问令牌寿命:5 分钟

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

我究竟做错了什么?

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

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

标签: keycloak

解决方案


Keycloak developer team has confirmed, that this is a bug in the current version of keycloak 4.8.3. Client sessions must be valid during the longer remember-me session. This bug will be fixed in the next version. Jira Ticket is for the time of writing not available.


推荐阅读