【发布时间】:2020-09-01 12:39:02
【问题描述】:
我们在 Sping Boot 2.2 上运行 API,因此使用 Sping Security 5.2。在使用 OAuth 保护此 API 时,我们使用 Spring Security 中内置的新功能(因为 Spring Security OAuth 项目现已弃用)。我们正在使用不透明的令牌,并且 (as indicated by the documentation) 具有以下形式的安全配置:
@Configuration
public static class OAuthWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests().mvcMatchers("/path/to/api/**").hasAuthority(CUSTOM_SCOPE)
.oauth2ResourceServer().opaqueToken().introspector(opaqueTokenIntrospector());
}
}
这里的opaqueTokenIntrospector() 是一个执行以下任务的bean:
- 向自省端点发送请求以获取完整令牌。
- 还向 userinfo 端点发送请求,以从 IDP 获取有关用户的其他信息。
- 将其中一些附加信息映射到自定义 spring 角色中,并将这些角色添加到经过身份验证的用户。
按照这种配置的设置方式,对 API 的每个请求都带有两个附加请求:一个到自省端点,一个到 userinfo 端点。如果用户对 API 执行连续请求,最好节省其中一些。
是否可以将opaqueTokenIntrospector() 的结果保存在用户的会话中?这样,每个用户只需执行一次 bean 的整个流程,从而节省了冗余请求。
【问题讨论】:
标签: spring-boot spring-security oauth-2.0