我有一个SpringBoot应用程序,我正试图将它从旧的Spring Security OAuth 2.x库更新到新的Spring Security 5.5.x。最初,我的配置类使用@EnableResourceServer
注释,但根据迁移指南,这被Spring Security DSL oauth2ResourceServer
方法所取代。
我已经添加了一个自定义的JWT身份验证转换器,但现在在启动时收到以下警告:
09:30:51.591 [, , ] [main] WARN %->5level org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.oauth2.jwt.JwtDecoder' available
我还不能看到这个JwtDecoder
在过滤器链中的什么位置使用,但是它阻止了我的应用程序启动。
@Configuration
@Order(OAuthTokenApiSecurityConfig.ORDER)
public class OAuthTokenApiSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(final HttpSecurity http) throws Exception { // NOPMD
// @formatter:off
http
.requestMatcher(new OAuth2RequestMatcher())
...
...
.oauth2ResourceServer()
.jwt()
.jwtAuthenticationConverter(customTokenAuthenticationConverter());
// @formatter:on
}
@Bean
public CustomTokenAuthenticationConverter customTokenAuthenticationConverter() {
return new CustomTokenAuthenticationConverter();
}
@Bean
public JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter() {
return new JwtGrantedAuthoritiesConverter();
}
}
dependecies {
api("org.springframework.security:spring-security-oauth2-resource-server")
api("org.springframework.security:spring-security-oauth2-core")
api("org.springframework.security:spring-security-oauth2-jose")
api("com.nimbusds:nimbus-jose-jwt")
}
springBootVersion=2.5.3
springSecurity=5.5.1
是否有一些我遗漏的依赖项,或者是否有一些配置或其他东西?
发布于 2021-08-09 14:01:43
在Jwt配置中使用JwtDecoder来根据公钥解码和验证传入的令牌。
有多种方法可以构建通过JwtDecoders
类中的一些工厂方法提供的bean。
具体来说,
JwtDecoders.fromIssuerUri(...)
和JwtDecoders.fromOidcIssuerUri(...)
,我相信现在有第三种方法可以直接指向一个键。
解码器本身可以在jwt
配置的decoder
方法上显式设置,如果您想/需要手动构建解码器,例如想要向JwtDecoder
添加更多验证。
如果您阅读OAuth2ResourceServerConfigurer
的javadoc,还可以选择通过jwkSetUri
方法设置Jwk set URI,这也将构建一个解码器。
使用JwtDecoder
的确切位置在最终将从BearerTokenAuthenticationFilter
调用的JwtAuthenticationProvider
内
https://stackoverflow.com/questions/68713080
复制相似问题