在 Keycloak 中禁用刷新令牌

Posted

技术标签:

【中文标题】在 Keycloak 中禁用刷新令牌【英文标题】:Disable Refresh Token in Keycloak 【发布时间】:2020-09-01 01:55:24 【问题描述】:

我们有一个由 OIDC 使用隐式流程授权的 Angular SPA。我们使用 Keycloak 作为我们的授权服务器。访问令牌的生命周期很短,并通过隐藏的 iframe 定期刷新。

在阅读授权代码流程 + PKCE 是授权 SPA 的新推荐方式后,我们决定切换流程。 一切正常,但每次调用 Token-Endpoint 时,Keycloak 都会给我们一个 Refresh Token(连同 Access 和 ID-Token)。 由于没有安全的方式来存储刷新令牌,我们想继续使用隐藏的 iframe 方法来刷新访问令牌。

有没有办法? 还是我们错过了什么?可以在 SPA 中存储刷新令牌吗?

【问题讨论】:

你发现了吗? 我还没有发现。我们仍在使用隐藏的 iframe。一旦我解决了这个问题,我肯定会更新这个问题,因为有些人似乎对此感兴趣。根据这个post SPA 中的刷新令牌,只要使用“刷新令牌轮换”就可以了。我在 Keycloak 中没有找到这样的功能。 您是否尝试减少 refresh_token 的寿命。例如 - 到 1 分钟? 我相信这在 13.0.0 版本中是可能的。 issues.redhat.com/browse/… 【参考方案1】:

最近版本的 Keycloak 已在“OpenID Connect Compatibility Modes”部分下的客户端级别实现了此功能。

我已使用 14.x 版本进行了验证。

【讨论】:

【参考方案2】:

从 Keycloak 的源代码中可以看出,它仍然没有提供在身份验证代码流期间禁用刷新令牌发布的方法。不幸的是,您应该继续使用隐式授权流程,因为存储在客户端的刷新令牌是一个很大的缺陷。

【讨论】:

以上是关于在 Keycloak 中禁用刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

从 keycloak 刷新访问令牌时出现 CORS 错误

使用 Keycloak 刷新令牌

为啥 keycloak 在页面刷新时未经授权?

Keycloak:ajax调用过期后刷新访问令牌

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

如何使用 Spring boot keycloak 适配器 + spring security 强制更新 oAuth 令牌(访问令牌 + 刷新令牌)。?