我按照此处的文档构建了一个 spring security oauth2 资源服务器多租户解决方案:
这里:
这很好用,但需要注意的是,两个发行者都使用相同的不记名令牌解析器。在我的例子中,一个发行者在 Authorization 标头上指定令牌,另一个发行者在自定义标头中发送令牌。
如何配置 spring security 为每个颁发者指定不同的 BearerTokenResolver?
我当前的代码如下,只有在两个发行者都在 X-JWT-ASSERTION 标头中提供令牌时才有效。
@Bean
BearerTokenResolver getTokenResolver()
{
return new HeaderBearerTokenResolver("X-JWT-ASSERTION");
}
@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));
}
}