为每个 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
据我所知,您可能需要为此编写一些自定义逻辑。
另一个最佳选择是保持访问令牌的生命周期非常有限。
我有 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
据我所知,您可能需要为此编写一些自定义逻辑。
另一个最佳选择是保持访问令牌的生命周期非常有限。