我有一个关于 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 会话一样长。
Keycloak 开发团队已确认,这是当前版本的 keycloak 4.8.3 中的一个错误。客户端会话在较长的“记住我”会话期间必须有效。该错误将在下一个版本中修复。Jira Ticket 在撰写本文时尚不可用。
| 归档时间: |
|
| 查看次数: |
5256 次 |
| 最近记录: |