为每个 api 调用验证 keycloak 服务器上的令牌

Nem*_*nic 0 spring oauth-2.0 keycloak

我有 keycloak spring 微服务和使用 keycloak 适配器和 keycloak-spring-boot-starter 的常规 java spring 服务。当 keycloak 发出有效令牌并且我将其传递给 spring 服务时,验证令牌是有效的并且一切正常。

如果我重新启动 keycloak 服务并将之前颁发的令牌再次传递给 spring 服务,验证将再次通过。这是为什么?我希望 spring 能够弄清楚该令牌是由先前存在的 keycloak 实例颁发的,并报告无效令牌。

Uma*_*nth 5

如果您查看令牌有效负载,它具有以下详细信息
在此输入图像描述

因此,仅重新启动 keycloak 实例而不更改任何内容不会使令牌无效,这会产生很多问题。
有一种选择,如果实例本身发生更改(例如主机名),这将导致令牌验证返回active:false

例如,如果我使用以下 URL 请求令牌

http://localhost:8080/auth/realms/testrealm/protocol/openid-connect/token
Run Code Online (Sandbox Code Playgroud)

并使用此内省 url 对其进行验证,令牌将显示为有效。

http://localhost:8080/auth/realms/testrealm/protocol/openid-connect/token/introspect
Run Code Online (Sandbox Code Playgroud)

但是,如果我只是将内省 url 中的主机名更改为 127.0.0.1,则令牌不再有效

http://127.0.0.1:8080/auth/realms/testrealm/protocol/openid-connect/token/introspect
Run Code Online (Sandbox Code Playgroud)

因此,据我所知,您可能需要为此编写一些自定义逻辑。

另一个最佳选择是保持访问令牌的生命周期非常有限。