BearerTokenAuthenticationFilter使用AuthenticationDetailsSource来构建身份验证请求的详细信息:
authenticationRequest.setDetails(this.authenticationDetailsSource.buildDetails(request));
我隐式地使用了spring-security-config-5.7.2提供的OAuth2 ResourceServerConfigurer,遗憾的是,它没有考虑开发人员定义的AuthenticationDetailsSource:
BearerTokenAuthenticationFilter filter = new BearerTokenAuthenticationFilter(resolver);
filter.setBearerTokenResolver(bearerTokenResolver);
filter.setAuthenticationEntryPoint(this.authenticationEntryPoint);
filter = postProcess(filter);
http.addFilter(filter);
我确认BearerTokenAuthenticationFilter具有我需要的设置程序:
setAuthenticationDetailsSource()
但是我无法找到一种正确而简单的方法来使用setter(或任何其他方法)为该特定过滤器使用自定义AuthenticationDetailsSource。我正在努力避免创建新的过滤器或新的配置。
我尝试过的方法:
1.去github看看有没有新的版本--不幸的是没有。
1.已尝试自动连接Spring安全筛选器链并直接设置筛选器的AuthenticationDetailsSource,但到目前为止没有成功。
是否有人能够轻松地为承载令牌认证过滤器设置认证详细信息源?
稍后编辑
我已经将这个问题作为Github问题发布给Spring Security团队:https://github.com/spring-projects/spring-security/issues/11655
根据jzheaux@GitHub的说法,正如在接受的答案中指出的,我成功地使用了一个ObjectPostProcessor:
http
.oauth2ResourceServer((oauth2) -> oauth2
.jwt(withDefaults())
.withObjectPostProcessor(new ObjectPostProcessor<BearerTokenAuthenticationFilter>() {
@Override
public BearerTokenAuthenticationFilter postProcess(BearerTokenAuthenticationFilter object) {
object.setAuthenticationDetailsSource(myAuthenticationDetailsSource);
return object;
}
});
1条答案
按热度按时间byqmnocz1#
要设置您自己的验证详细信息源,请创建ObjectPostProcessor类,在该类中可以使用setAuthenticationDetailsSource:
然后,您可以在创建SecurityFilterChain配置时设置MyObjectPostProcessor: