Spring通过Eureka从身份验证服务获取公钥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring通过Eureka从身份验证服务获取公钥相关的知识,希望对你有一定的参考价值。

我正在实现一个使用公钥验证JWT令牌的Spring Security Resource Server。 我正在尝试通过Eureka服务从我构建的身份验证服务中获取公钥。 服务启动时,服务在Eureka上注册之前发生。 因此,当它调用身份验证服务时,会抛出UnknownHostException。 我可以在Eureka注册完成后修改订单并设置密钥吗?

@EnableResourceServer
public class MyResourceServerConfig extends 
AuthorizationServerConfigurerAdapter {

    @Bean
    @Primary
    public DefaultTokenServices tokenServices() {
        DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        defaultTokenServices.setTokenStore(tokenStore());
        return defaultTokenServices;
    }

    @Bean
    public TokenStore tokenStore() {
        return new JwtTokenStore(accessTokenConverter());
    }

    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        final JwtAccessTokenConverter converter = new JwtAccessTokenConverter();

        HttpEntity<Void> request = new HttpEntity<Void>(new HttpHeaders());
        ResponseEntity<Map> responseEntity = restTemplate.exchange(AUTH_URI, HttpMethod.GET, request, Map.class);
        String publicKey = (String) responseEntity.getBody().get("value");            
        converter.setVerifierKey(publicKey);

        return converter;
    }
}
答案

@DependsOn注释可以帮助。

来自docs:

...在bean没有通过属性或构造函数参数显式依赖于另一个bean的情况下很少使用,而是依赖于另一个bean初始化的副作用。 ...

您可以尝试将@Depends("discoveryClient")添加到实现auth-service客户端的类中。

注意:我没有测试bean名称是否应该是discoveryClient。如果这不起作用,请参阅调试日志以查看正确的bean名称。

以上是关于Spring通过Eureka从身份验证服务获取公钥的主要内容,如果未能解决你的问题,请参考以下文章

如何使用基本身份验证保护 Spring Cloud Eureka 服务?

身份验证后请求其他服务时如何从 JWT 令牌获取用户名?

Spring Cloud Eureka Netflix zuul 过滤器

NestJs 使用 jwt 和私钥和公钥进行身份验证

访问 Spring boot Zuul Service 路由的身份验证

使用事务包装 Spring Security 自定义身份验证提供程序