在 Spring Security 中支持具有不同令牌解析器的多个 JWT 颁发者

Dal*_*vie 5 spring-security-oauth2

我按照此处的文档构建了一个 spring security oauth2 资源服务器多租户解决方案:

https://docs.spring.io/spring-security/site/docs/current/reference/html5/#oauth2resourceserver-multitenancy

和这里:

https://docs.spring.io/spring-security/site/docs/current/reference/html5/#oauth2resourceserver-bearertoken-resolver

这工作得很好,但需要注意的是两个发行者都使用相同的不记名令牌解析器。在我的例子中,一个颁发者在授权标头上指定令牌,另一个颁发者在自定义标头中发送令牌。

如何配置 spring security 为每个发行者指定不同的 BearerTokenResolver?

我当前的代码如下,仅当两个颁发者在 X-JWT-ASSERTION 标头中提供令牌时才有效。

@Bean
BearerTokenResolver getTokenResolver()
{
    return new HeaderBearerTokenResolver("X-JWT-ASSERTION");
}
Run Code Online (Sandbox Code Playgroud)
@Configuration
public class JWTSecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${oauth2.issuer-uris}")
    private String[] issuerUris;

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        var authenticationManagerResolver = new JwtIssuerAuthenticationManagerResolver(issuerUris);

        http
        .authorizeRequests(authz -> authz
                .antMatchers("/api/**").authenticated()
                .anyRequest().permitAll())
        .oauth2ResourceServer(oauth2 -> oauth2.authenticationManagerResolver(authenticationManagerResolver));

    }

}
Run Code Online (Sandbox Code Playgroud)