spring boot 2 中 jwt.key-uri 的替代品是什么
What's the replacement for jwt.key-uri in spring boot 2
我们正在使用具有以下属性的 spring boot 1 oauth。
安全。oauth2.resource.jwt.key-uri
spring boot2 不知何故丢失了它,有什么替代品吗?
我在 gitter chat 中问过同样的问题。
戴夫赛尔说:
Those features were removed. They are migrating to Spring Security.
But slowly. The plan is to have a shim jar that you can use in the
transition period. but that's not done yet @rwinch said he was going
to publish something after Spring One (i.e. next week earliest)
所以还没有替代品。他们从 spring-boot 中删除了一些资源服务器自动配置。他们还没有将其添加回 spring-security。但这很快就会到来。
所以您目前所能做的就是从 spring-boot 1.5 复制所需的代码。
编辑
同时,有一个项目可以帮助您在 spring-boot 2 中获得 spring-security-oauth 自动配置 - 请参阅 https://github.com/spring-projects/spring-security-oauth2-boot
另请参阅 spring 引导 1.5->2.0 迁移指南 - https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#oauth2
我在从 spring 引导 1 迁移到引导 2 时遇到了同样的事情。目前,您可以保持您的 oauth2 属性完全相同。我刚刚添加了一个使用 WebClient 检索 public 键的方法:
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;
}
你也可以直接配置public键值而不是URI,这样更简单。
当然,这只是临时解决方案,直到spring boot 2 具有真正的功能。
我遇到了同样的问题,在网上搜索了很多资源后,我找到了这个解决方案:
有一个 JwkTokenStore(它不同于 JwtTokenStore)。这个 JwkTokenStore 在构造函数中接受一个字符串,该字符串指向一个键集-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 一起使用,对我们来说效果很好。
亲切的问候,
丹尼
我们正在使用具有以下属性的 spring boot 1 oauth。
安全。oauth2.resource.jwt.key-uri
spring boot2 不知何故丢失了它,有什么替代品吗?
我在 gitter chat 中问过同样的问题。
戴夫赛尔说:
Those features were removed. They are migrating to Spring Security. But slowly. The plan is to have a shim jar that you can use in the transition period. but that's not done yet @rwinch said he was going to publish something after Spring One (i.e. next week earliest)
所以还没有替代品。他们从 spring-boot 中删除了一些资源服务器自动配置。他们还没有将其添加回 spring-security。但这很快就会到来。
所以您目前所能做的就是从 spring-boot 1.5 复制所需的代码。
编辑
同时,有一个项目可以帮助您在 spring-boot 2 中获得 spring-security-oauth 自动配置 - 请参阅 https://github.com/spring-projects/spring-security-oauth2-boot
另请参阅 spring 引导 1.5->2.0 迁移指南 - https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#oauth2
我在从 spring 引导 1 迁移到引导 2 时遇到了同样的事情。目前,您可以保持您的 oauth2 属性完全相同。我刚刚添加了一个使用 WebClient 检索 public 键的方法:
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;
}
你也可以直接配置public键值而不是URI,这样更简单。
当然,这只是临时解决方案,直到spring boot 2 具有真正的功能。
我遇到了同样的问题,在网上搜索了很多资源后,我找到了这个解决方案:
有一个 JwkTokenStore(它不同于 JwtTokenStore)。这个 JwkTokenStore 在构造函数中接受一个字符串,该字符串指向一个键集-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 一起使用,对我们来说效果很好。
亲切的问候,
丹尼