我在密钥斗篷(7.0.0)中有一个具有给定配置的客户端-突出显示的选项“启用对“客户端凭据授予”的支持”:
当我获得该客户端的令牌(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
秒{1>}创建一个新会话:>
expires_in
if (accessToken == null || accessToken.isExpired()) {
try {
// no refresh token usage here
accessToken = acquireAccessToken();
}
...
}
的刷新令牌,这是后端->后端通信的授予类型? OAuth2文档link明确表示“ client_credentials
授权类型的“不应包含刷新令牌”。client_credentials
授权类型的客户端发送刷新令牌?client_credentials
-offline_access
是refresh_expires_in
,并且据我了解,刷新令牌是脱机令牌。这是密钥交换邮件列表的link,其中密钥交换团队的某人建议使用脱机令牌-这是否与0
授权类型的OIDC规范冲突?
答案 0 :(得分:3)
我的回答可能有点太晚了,但 Keycloak 最近增加了在 client_credentials
授权的情况下禁用刷新令牌的支持。这已在 2020 年 12 月发布的 12.0.0
版中实现。
以下是指向该内容的文档部分:https://www.keycloak.org/docs/12.0/release_notes/#other-improvements
在此版本之前,无法禁用刷新令牌,因此您确实必须编写自己的 OAuth2FeignRequestInterceptor
版本,它会忽略刷新令牌(并尝试获取新的访问令牌) ,或使用刷新令牌获取更新的访问令牌。我会选择第一个解决方案,因为它离 OAUTH2 spec 更近。