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

Validate token on keycloak server for every api call

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

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

如果您查看令牌负载,它具有以下详细信息

因此,仅在不更改任何内容的情况下重启 keycloak 实例不会使令牌无效,这会产生很多问题。
有一种选择,如果实例本身发生更改,例如主机名,这将导致令牌验证为 return active:false.

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

http://localhost:8080/auth/realms/testrealm/protocol/openid-connect/token

并使用此自省验证它 url,令牌将显示为有效。

http://localhost:8080/auth/realms/testrealm/protocol/openid-connect/token/introspect

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

http://127.0.0.1:8080/auth/realms/testrealm/protocol/openid-connect/token/introspect

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

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