具有刷新令牌的Keycloak客户端凭据授予类型

时间:2019-10-30 08:19:25

标签: keycloak spring-security-oauth2 openid-connect spring-cloud-feign

我在密钥斗篷(7.0.0)中有一个具有给定配置的客户端-突出显示的选项“启用对“客户端凭据授予”的支持”: Keycloak lient configuration

当我获得该客户端的令牌(POST / auth / realms / {my-realm} / protocol / openid-connect / token)时,会收到以下json响应:

{
  "access_token": "xxx",
  "expires_in": 600,
  "refresh_expires_in": 1800,
  "refresh_token": "xxx",
  "token_type": "bearer",
  "not-before-policy": 1572415518,
  "session_state": "xxx",
  "scope": "xxx xxx"
}

我想将其与OAuth2FeignRequestInterceptor集成,默认情况下,它会忽略刷新令牌,并每{strong> access_token秒{}创建一个新会话:

expires_in

我的问题是:

  1. 为什么我完全收到if (accessToken == null || accessToken.isExpired()) { try { // no refresh token usage here accessToken = acquireAccessToken(); } ... } 的刷新令牌,这是后端->后端通信的授予类型? OAuth2文档link明确表示“ client_credentials授权类型的“不应包含刷新令牌”。
  2. 是否可以配置密钥斗篷,使其不为具有client_credentials授权类型的客户端发送刷新令牌?
  3. 如果对2.的回答是'否'-我是否必须实现自己的带有刷新令牌支持的伪装请求拦截器?
  4. 如果客户范围包括client_credentials-offline_accessrefresh_expires_in,并且据我了解,刷新令牌是脱机令牌。这是密钥交换邮件列表的link,其中密钥交换团队的某人建议使用脱机令牌-这是否与0授权类型的OIDC规范冲突?

`

1 个答案:

答案 0 :(得分:3)

我的回答可能有点太晚了,但 Keycloak 最近增加了在 client_credentials 授权的情况下禁用刷新令牌的支持。这已在 2020 年 12 月发布的 12.0.0 版中实现。

以下是指向该内容的文档部分:https://www.keycloak.org/docs/12.0/release_notes/#other-improvements

在此版本之前,无法禁用刷新令牌,因此您确实必须编写自己的 OAuth2FeignRequestInterceptor 版本,它会忽略刷新令牌(并尝试获取新的访问令牌) ,或使用刷新令牌获取更新的访问令牌。我会选择第一个解决方案,因为它离 OAUTH2 spec 更近。