keycloak - “会话没有必需的客户端”是什么意思?
问题描述
我有一个关于 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 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.
推荐阅读
- javascript - ImmutableJS 编程键命名?
- python - 通过 Python 在 Excel 中创建切片器对象
- sql - 将参数传递给参数化查询?
- javafx - 禁用基于 HTML 的滚动 webview javafx
- amazon-web-services - AWS DMS 与 CDC 到 S3。它将如何处理行更新和删除?
- python - 在 matplotlib 箱线图上显示中值
- python - 有没有办法让python子进程在运行一次脚本后不终止?
- python - 使用 Kivy 创建 sqlite3 数据库
- sitecore - Sitecore 9.0 - 希望实施 Azure AD B2C
- sql-server - 为什么我的代码优先 ASP.NET MVC 应用程序突然无法工作,只是因为我从另一个位置打开它?