我有一个使用Spring云安全保护的OAuth资源服务器。
使用的OAuth令牌是JWT令牌,因此资源服务器需要验证者密钥才能检查令牌的签名。
为了简化配置,我希望资源服务器从授权提供程序获取验证程序密钥(也是一个带有@EnableAuthorizationServer
的Spring引导服务)。
如果我提供授权提供程序的直接URL(使用spring.oauth2.resource.jwt.keyUri),例如http://ip_of_authorization_provider/oauth/token_key,这样可以正常工作。
问题是当我想在该值中提供service-id而不是IP或DNS时,例如。 http://authorization-provider/oauth/token_key
在我看来,问题出现在this file的第225行的JwtTokenServicesConfiguration中,特别是:
private RestTemplate keyUriRestTemplate = new RestTemplate();
如果keyUriRestTemplate是Autowired,我可以提供自己的负载平衡休息模板,或者如果在下面的jwtAccessTokenConverter方法中有@ConditionalOnMissingBean(JwtAccessTokenConverter.class),我也可以提供自己的负载均衡逻辑。
有没有办法做我想要的,没有在我的应用程序中重新创建整个ResourceServerTokenServicesConfiguration类的丑陋黑客只是为了只进行这个小修改?
答案 0 :(得分:0)
有一个更简单,更清洁的解决方案:
抛弃spring-cloud-security所做的自动配置,并提供自己的tokenServices实现,这些实现提供了一个JwtAccessTokenConverter,它的密钥是你提供的LoadBalanced RestTemplate。您最终可能希望在配置中提供其他细节......