首页 > 解决方案 > Keycloak 刷新令牌不是离线类型

问题描述

我是 keycloak 中身份管理和用户管理的新手。

我正在尝试生成离线刷新令牌。我正在使用 keycloak 12.0.1 我在 ldap-demo 领域创建了一个客户端,并确保默认情况下将 offline_access 添加到范围内。此 curl 命令为我提供了不记名令牌和刷新令牌。现在,当我检查 jwt.io 中的刷新令牌时,它的“typ”不是“离线”,而是仅刷新。我还定义了一个用户和角色,默认情况下定义了offline_access。

refresh_token=`curl \
-d "client_id=ldap-app" -d "client_secret=password" \
-d "username=user1" -d "password=password" \
-d "grant_type=password"  \
-d "scope=offline_access"  \
https://localhost:8080/auth/realms/ldap-demo/protocol/openid-connect/token  | jq -r '.refresh_token'`

请建议我需要在 keycloak 中执行的所有领域级别配置或客户端级别配置。

标签: oauth-2.0keycloakaccess-tokenbearer-tokenkeycloak-services

解决方案


刷新令牌格式是特定于供应商的,您无法通过查看它来确定行为。

offline_access 范围将出现在访问令牌中,如果它是 JWT,您将能够在其中查看此范围。

要测试的是发送刷新令牌授予消息 - 您可以通过curl 命令或使用OAuth Tools来执行此操作。

完整的行为通常是这样的:

  • 授权服务器 (AS) - 例如 Keycloak - 在其数据库中存储委托的详细信息
  • 在您的情况下,授权发生在处理密码授予消息时
  • 当您使用刷新令牌时,会根据存储的状态检查详细信息

这意味着返回给客户的代币不需要透露全部细节。例如,在某些情况下可以并且应该返回不透明/不可读的标记。


推荐阅读