我们正在使用具有以下属性的spring boot 1 oauth。
security.oauth2.resource.jwt.key-URI
不知何故,它在春季boot2中丢失了,是否有任何替代?
答案 0 :(得分:4)
我在gitter chat中问了同样的问题。
戴夫西尔说:删除了这些功能。他们正在迁移到Spring Security。 但慢慢来。计划是有一个你可以使用的垫片 过渡期。但是还没有完成@rwinch说他要去了 在Spring One之后发布一些东西(即下周最早的)
所以还没有替代品。他们从spring-boot中删除了一些资源服务器Autoconfiguration。他们还没有将它添加回春季安全。但这很快就会到来。
所以你现在所能做的就是从spring-boot 1.5复制所需的代码。
修改强>
与此同时,有一个项目可以帮助您在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)
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带有真正的功能。