KeyCloak 刷新外部 IDP 令牌

Ayo*_*tta 6 refresh token openid-connect keycloak idp

我们使用 KeyCloak 身份代理来联合外部 IDP 的身份验证。身份提供程序的类型为 OpenID Connect v1.0。此外,我们将 OIDC 授权代码流与 PKCE 结合使用。

我们能够根据以下文档成功地从外部 IDP 检索令牌: https://www.keycloak.org/docs/latest/server_admin/#retriving-external-idp-tokens

但是,当使用用户代理授予的“refresh_token”刷新 KeyCloak 令牌时,来自外部 IDP 的令牌不会刷新。KeyCloak 提供的有关此主题的文档非常少。

有谁知道如何从外部 IDP 刷新令牌?

更新:我已经向 KeyCloak 社区提出了一个问题 https://github.com/keycloak/keycloak-community/issues/277

小智 3

Keycloak 保留来自上游 IdP 的访问令牌和刷新令牌。当您执行令牌交换时,如果访问令牌已过期但刷新令牌尚未过期,它将刷新令牌,如下所示:https: //github.com/keycloak/keycloak/blob/master/services/src/main/java /org/keycloak/broker/oidc/OIDCIdentityProvider.java#L186-L187

总而言之,您需要比外部刷新令牌过期更频繁地调用令牌交换端点。根据您的实现,您可以通过多种方式利用这一点。例如,我将访问令牌 ttl 设置为短于外部 IdP 的刷新令牌 ttl,并且我有一个机密客户端,每次看到新的访问令牌时都会调用令牌交换端点,这不是最佳解决方案但这比用锋利的棍子刺眼睛要好。

我不知道为什么 Keycloak 开发人员在您对 Keycloak 铸造的令牌执行令牌刷新时不刷新任何外部令牌。他们都是聪明人,所以我确信这是有原因的,但到目前为止我还没有弄清楚。我一直在考虑扩展现有的功能OIDCIdentityProvider来做到这一点,但在我明白我要做什么之前,我宁愿不打开那罐蠕虫。如果有人有任何见解,我将不胜感激。