Keycloak :使用带有永不过期令牌的服务帐户

Posted

技术标签:

【中文标题】Keycloak :使用带有永不过期令牌的服务帐户【英文标题】:Keycloak : Use service account with token that never expire 【发布时间】:2021-12-12 18:14:55 【问题描述】:

我正在使用 Keycloak 和 SpringBoot API。 我的目标是能够将 keycloak Admin REST API 与仅生成一次的令牌一起使用。 我已启用服务帐户,但令牌会在几秒钟后过期。 我该怎么做才能生成永不过期的令牌? (例如在 Openshift 服务帐户上)

如果不可能,我如何将我的 springboot 服务连接到 Keycloak 实例? 我是否需要在每次请求之前生成一个令牌??

curl --location --request POST 'http://localhost:8081/auth/realms/api/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=admin-cli' \
--data-urlencode 'client_secret=f8111a95-67dd-412e-9e04-cf044f0e0286'

感谢您提供任何信息

【问题讨论】:

【参考方案1】:

您可以实现一个小助手组件,集中提供令牌,在后台自动刷新它(如果需要)。 Keycloak 的响应包含一个 expires_in 属性,该属性以秒为单位保存令牌到期时间,并且令牌本身在标准 exp 声明中携带到期信息。

【讨论】:

你有这个实现的例子吗? 我刚刚创建了一个要点here。 谢谢会检查这个【参考方案2】:

Keycloak 为此提供了一个基于 Java 的管理客户端。它为您处理身份验证和令牌刷新。

Maven坐标如下:

<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-admin-client</artifactId>
    <version>15.0.2</version>
</dependency>

源代码可在 Github https://github.com/keycloak/keycloak/tree/master/integration/admin-client 获得

入口点将是Keycloak 类,Javadocs 可以在here 找到。

【讨论】:

以上是关于Keycloak :使用带有永不过期令牌的服务帐户的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 和 Spring Security 中,不活动、过期的令牌会导致带有 Keycloak 的 IllegalStateException

Keycloak - 在 JWT 令牌中接收帐户服务角色,但需要自定义角色

Keycloak - 令牌过期后在 Ajax 调用中获取 401

Nodejs jwt 令牌永不过期

Keycloak 返回已经过期的令牌

实现永不过期的 OAuth 刷新令牌