Keycloak 返回已经过期的令牌

Posted

技术标签:

【中文标题】Keycloak 返回已经过期的令牌【英文标题】:Keycloak returning already-expired tokens 【发布时间】:2021-02-09 00:15:25 【问题描述】:

我正在尝试使用 keycloak 获取访问令牌,

但我在尝试使用 keycloak 颁发的令牌时收到错误 Token is expired

例如,如果我使用 curl 获取令牌:

curl -u account:___mysecret___ -k
-d "grant_type=password&username=testuser&password=__some__pass"
-H "Content-Type:application/x-www-form-urlencoded" 
http://localhost:8080/auth/realms/testRealm/protocol/openid-connect/token

使用jwt.io解码返回的token,可以看到exp日期是昨天的日期。

如何获得可用的访问令牌?

【问题讨论】:

你的本地主机时间错了吗? @JanGaraj 也许。它在 docker 中运行。但是由于其他原因我不得不重新启动计算机,然后时间就可以了。 【参考方案1】:

我认为您在 Windows 上使用带有 docker 桌面的 keycloak。

以及您的 hyperV 的本地时间不再与您的主机同步。

如果您在 docker 容器中写了 : date,则日期是错误的。

所以keycloak的tokengenerate过时了

所以重启 hyperV 会重新同步 docker 容器中的本地时间。

更多信息在这里:How to make sure docker's time syncs with that of the host?

【讨论】:

【参考方案2】:

检查了“领域设置”的“令牌”选项卡!在那里您可以配置会话超时和令牌有效性。

如果有设置,请进一步检查“clients”=>“settings”=>“advanced settings”。

然后请检查您的keycloak主机上配置的时间和时区。

【讨论】:

不得不重新启动计算机(出于其他原因),之后 keycloak 继续正常工作。

以上是关于Keycloak 返回已经过期的令牌的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

如何设置访问令牌在几秒钟内过期

使用 Spring Security Adapter 时的 Keycloak 会话超时行为

如何在 Keycloak 中指定刷新令牌的生命周期