我通过使用authorization_code(scope=openidoffline_access)向/openid-connect/token发送请求来获取离线令牌。在 Keycloak 管理控制台的“离线访问”选项卡中,我可以看到为我用来登录的用户创建的离线令牌。 (离线代币:
然后我通过调用 /openid-connect/logout 来注销用户,并从 1. 发送离线令牌作为参数。在 Keycloak 管理控制台的“离线访问”选项卡中,我可以看到用于登录的用户的离线令牌已被删除。 (离线代币:0)
然后我尝试通过我用于注销的离线令牌来获取访问令牌。我收到以下响应:未找到离线用户会话。
我希望尽管注销,应用程序仍然可以使用离线令牌来获取新的访问令牌。
正如离线访问 | 中所述keycloak-documentation :“应用程序可以将此离线令牌保存在数据库或磁盘上,即使用户注销也可以稍后使用它”。
我的用户具有offline_access 角色的角色映射。客户在其范围内也具有该角色。
我做错了什么吗?
从本地客户端应用程序注销和从 Keycloak 注销之间存在差异。
从本地客户端注销(终止本地会话)仍然允许客户端在后台使用令牌。因此,这完全取决于您如何“定义”注销的含义。
另一种方法是,无论用户是否登录,您的客户端都使用客户端凭据流与后端 API 进行通信。