带有 'refresh_token' grant_type 的 Keycloak 离线访问令牌
Keycloak Offline Access token with 'refresh_token' grant_type
我正在尝试通过以下请求从 Keycloak 获取离线访问权限:
curl -X POST https://<domain>/auth/realms/public/protocol/openid-connect/token
-H "Content-Type: application/x-www-form-urlencoded"
-d 'grant_type=refresh_token'
-d "refresh_token=<token>"
-d 'scope=offline_access'
-d 'client_id=<id>'
-d 'client_secret=<secret>'
响应中的 scope
不是我预期的 offline_access
,而是 openid
,而且管理控制台中的离线令牌数也没有更新。
{
"access_token": <access token>,
"expires_in": 3600,
"refresh_expires_in": 84884,
"refresh_token": <refresh token>,
"token_type": "bearer",
"id_token": <id token>,
"not-before-policy": 0,
"session_state": <state>,
"scope": "openid"
}
如何使用 grant_type
'refresh_token'
获取离线访问令牌?
请注意,我可以使用 grant_type
password
获取它们,但我不想使用它,因为:
- 我已经在我的应用程序中使用了刷新令牌,但我无权访问密码
- 我不确定社交登录和 2FA 如何工作
通常 offline_access 需要在原始授权请求中指定 - 在授权时 - 在某些设置中还涉及用户同意离线使用令牌。
尝试像这样获取刷新令牌,当完成授权时:
curl -X POST https://<domain>/auth/realms/public/protocol/openid-connect/token
-H "Content-Type: application/x-www-form-urlencoded"
-d 'grant_type=authorization_code'
-d 'code=<code>'
-d "redirect_uri=<uri>'
-d 'scope=openid offline_access'
-d 'client_id=<id>'
-d 'client_secret=<secret>'
然后省略您发布的刷新令牌授予请求中的范围参数。范围参数通常不在此消息中指定。如果是,那么它只能用于缩小委托范围。也就是说,您无法静默获取用户未同意的新范围。
我正在尝试通过以下请求从 Keycloak 获取离线访问权限:
curl -X POST https://<domain>/auth/realms/public/protocol/openid-connect/token
-H "Content-Type: application/x-www-form-urlencoded"
-d 'grant_type=refresh_token'
-d "refresh_token=<token>"
-d 'scope=offline_access'
-d 'client_id=<id>'
-d 'client_secret=<secret>'
响应中的 scope
不是我预期的 offline_access
,而是 openid
,而且管理控制台中的离线令牌数也没有更新。
{
"access_token": <access token>,
"expires_in": 3600,
"refresh_expires_in": 84884,
"refresh_token": <refresh token>,
"token_type": "bearer",
"id_token": <id token>,
"not-before-policy": 0,
"session_state": <state>,
"scope": "openid"
}
如何使用 grant_type
'refresh_token'
获取离线访问令牌?
请注意,我可以使用 grant_type
password
获取它们,但我不想使用它,因为:
- 我已经在我的应用程序中使用了刷新令牌,但我无权访问密码
- 我不确定社交登录和 2FA 如何工作
通常 offline_access 需要在原始授权请求中指定 - 在授权时 - 在某些设置中还涉及用户同意离线使用令牌。
尝试像这样获取刷新令牌,当完成授权时:
curl -X POST https://<domain>/auth/realms/public/protocol/openid-connect/token
-H "Content-Type: application/x-www-form-urlencoded"
-d 'grant_type=authorization_code'
-d 'code=<code>'
-d "redirect_uri=<uri>'
-d 'scope=openid offline_access'
-d 'client_id=<id>'
-d 'client_secret=<secret>'
然后省略您发布的刷新令牌授予请求中的范围参数。范围参数通常不在此消息中指定。如果是,那么它只能用于缩小委托范围。也就是说,您无法静默获取用户未同意的新范围。