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 调用中获取 401
在 Spring Boot 和 Spring Security 中,不活动、过期的令牌会导致带有 Keycloak 的 IllegalStateException