如何使用资源服务器使用的 keyUri 中的服务 ID 来获取 JWT 验证程序密钥?
How to use a service id in the keyUri used by a resources server to get the JWT verifier key?
我有一个受 Spring 云安全保护的 OAuth 资源服务器。
使用的 OAuth 令牌是 JWT 令牌,因此资源服务器需要验证器密钥才能检查令牌的签名。
为了简化配置,我希望资源服务器从授权提供程序(也是 spring 引导服务,带有 @EnableAuthorizationServer
)获取验证器密钥。
如果我提供授权提供者的直接 url(使用 spring.oauth2.resource.jwt.keyUri),例如 http://ip_of_authorization_provider/oauth/token_key.
问题是当我想在该值中提供服务 ID 而不是 IP 或 DNS 时,例如。 http://authorization-provider/oauth/token_key.
在我看来,问题出在 this file 的第 225 行的 JwtTokenServicesConfiguration 中,具体来说:
private RestTemplate keyUriRestTemplate = new RestTemplate();
如果 keyUriRestTemplate 是自动连接的,我可以提供我自己的负载平衡休息模板,或者如果下面的 jwtAccessTokenConverter 方法上有一个 @ConditionalOnMissingBean(JwtAccessTokenConverter.class) 我也可以提供我自己的负载平衡逻辑。
有没有一种方法可以做我想做的事,而无需在我的应用程序中重新创建整个 ResourceServerTokenServicesConfiguration class 只是为了进行这个小修改?
有一个更简单、更干净的解决方案:
只需放弃由 spring-cloud-security 进行的自动配置,并提供您自己的 tokenServices 实现,该实现提供了一个 JwtAccessTokenConverter,您已通过 LoadBalanced RestTemplate 提供了其密钥。无论如何,您最终可能会想要在配置中提供其他细节...
我有一个受 Spring 云安全保护的 OAuth 资源服务器。
使用的 OAuth 令牌是 JWT 令牌,因此资源服务器需要验证器密钥才能检查令牌的签名。
为了简化配置,我希望资源服务器从授权提供程序(也是 spring 引导服务,带有 @EnableAuthorizationServer
)获取验证器密钥。
如果我提供授权提供者的直接 url(使用 spring.oauth2.resource.jwt.keyUri),例如 http://ip_of_authorization_provider/oauth/token_key.
问题是当我想在该值中提供服务 ID 而不是 IP 或 DNS 时,例如。 http://authorization-provider/oauth/token_key.
在我看来,问题出在 this file 的第 225 行的 JwtTokenServicesConfiguration 中,具体来说:
private RestTemplate keyUriRestTemplate = new RestTemplate();
如果 keyUriRestTemplate 是自动连接的,我可以提供我自己的负载平衡休息模板,或者如果下面的 jwtAccessTokenConverter 方法上有一个 @ConditionalOnMissingBean(JwtAccessTokenConverter.class) 我也可以提供我自己的负载平衡逻辑。
有没有一种方法可以做我想做的事,而无需在我的应用程序中重新创建整个 ResourceServerTokenServicesConfiguration class 只是为了进行这个小修改?
有一个更简单、更干净的解决方案:
只需放弃由 spring-cloud-security 进行的自动配置,并提供您自己的 tokenServices 实现,该实现提供了一个 JwtAccessTokenConverter,您已通过 LoadBalanced RestTemplate 提供了其密钥。无论如何,您最终可能会想要在配置中提供其他细节...