Spring boot 什么';s是spring boot 2中jwt.key-uri的替代品

Spring boot 什么';s是spring boot 2中jwt.key-uri的替代品,spring-boot,oauth-2.0,spring-security-oauth2,Spring Boot,Oauth 2.0,Spring Security Oauth2,我们正在使用具有以下属性的SpringBoot1OAuth security.oauth2.resource.jwt.key-uri 不知何故,它在SpringBoot2中丢失了,有什么替代品吗?我在报告中问了同样的问题 戴夫·赛尔说: 这些功能已被删除。他们正在迁移到Spring Security。 但是慢慢地。该计划是有一个垫片罐,您可以在 过渡期。但那还没有完成,他说他要去 在春季一号之后(即最早下周)出版 因此,目前还没有替代品。他们从spring boot中删除了一些资源服务器自动配置

我们正在使用具有以下属性的SpringBoot1OAuth

security.oauth2.resource.jwt.key-uri


不知何故,它在SpringBoot2中丢失了,有什么替代品吗?

我在报告中问了同样的问题

戴夫·赛尔说:

这些功能已被删除。他们正在迁移到Spring Security。 但是慢慢地。该计划是有一个垫片罐,您可以在 过渡期。但那还没有完成,他说他要去 在春季一号之后(即最早下周)出版

因此,目前还没有替代品。他们从spring boot中删除了一些资源服务器自动配置。他们还没有将其添加回spring security。但这很快就会到来

因此,目前您所能做的就是从SpringBoot1.5复制所需的代码

编辑

同时,有一个项目可以帮助您在SpringBoot2中获得SpringSecurityOAuth自动配置-请参阅


另请参阅spring boot 1.5->2.0迁移指南-

从spring boot 1迁移到2时,我正在处理相同的问题。目前,您可以保持oauth2属性完全相同。我刚刚添加了一个使用WebClient检索公钥的方法:

    private String getPublicKeyValue(String uriKey) {
    return Optional.of(WebClient.create(publicKeyUri))
                   .map(j -> j.get().retrieve().bodyToMono(JwtObject.class))
                   .map(Mono::block)
                   .map(JwtObject::getValue)
                   .orElseThrow(
                           () -> new RuntimeException("An error has occured while getting the public key from remote : " + publicKeyUri));
}
publicKeyUri是:

@Value("${security.oauth2.resource.jwk.key-set-uri}")
private String publicKeyUri;
然后像这样使用它:

   @Bean
public JwtAccessTokenConverter accessTokenConverter() {
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
    converter.setVerifierKey(getPublicKeyValue(publicKeyUri));
    return converter;
}
您还可以直接配置公钥值,而不是更简单的URI


当然,在spring boot 2具备真正的功能之前,这只是一个临时解决方案。

我也有同样的问题,在互联网上搜索了大量资源后,我找到了这个解决方案:

有一个JwkTokenStore(与jwtokenstore不同)。此JWKTokeStore接受构造函数中指向键集url的字符串

因此,我在我的ResourceServer配置中使用了以下内容:

@Value("${security.oauth2.resource.jwk.key-set-uri}")
private String keySetUri;

@Bean
public TokenStore tokenStore() {
   JwkTokenStore jwkTokenStore = new JwkTokenStore(keySetUri, accessTokenConverter());
   return jwkTokenStore;
}

@Bean
public JwtAccessTokenConverter accessTokenConverter() {
   JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
   return converter;
}
我将此应用于Azure AD/OpenIDConnect,对我们来说效果很好

亲切问候,

丹尼