什么是春季靴子2中jwt.key-uri的替代品

时间:2017-12-08 09:29:26

标签: spring-boot oauth-2.0 spring-security-oauth2

我们正在使用具有以下属性的spring boot 1 oauth。

security.oauth2.resource.jwt.key-URI

不知何故,它在春季boot2中丢失了,是否有任何替代?

3 个答案:

答案 0 :(得分:4)

我在gitter chat中问了同样的问题。

戴夫西尔说:

  

删除了这些功能。他们正在迁移到Spring Security。   但慢慢来。计划是有一个你可以使用的垫片   过渡期。但是还没有完成@rwinch说他要去了   在Spring One之后发布一些东西(即下周最早的)

所以还没有替代品。他们从spring-boot中删除了一些资源服务器Autoconfiguration。他们还没有将它添加回春季安全。但这很快就会到来。

所以你现在所能做的就是从spring-boot 1.5复制所需的代码。

enter image description here

修改

与此同时,有一个项目可以帮助您在spring-boot 2中获得spring-security-oauth自动配置 - 请参阅https://github.com/spring-projects/spring-security-oauth2-boot

另请参阅spring boot 1.5-> 2.0迁移指南 - https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#oauth2

答案 1 :(得分:3)

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

有一个 JwkTokenStore (与JwtTokenStore不同)。这个JwkTokenStore在构造函数中接受一个指向key-set-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中使用它,对我们来说它工作正常。

亲切的问候,

丹尼

答案 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。

当然,这只是一个临时解决方案,直到春季启动2带有真正的功能。