spring-security - Spring security oauth2登录和资源服务器在同一个应用程序中
问题描述
我有一个应用程序,用户/应用程序可以使用 OpenID 提供程序或 JWT 令牌进行身份验证。这是我的spring安全配置类。
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.oauth2Login()
.userInfoEndpoint()
.oidcUserService(oidcUserService()).and()
.and()
.oauth2ResourceServer()
.jwt();
}
private OAuth2UserService<OidcUserRequest, OidcUser> oidcUserService() {
return oidcUserRequest -> {
OidcUserService oidcUserService = new OidcUserService();
OidcUser oidcUser = oidcUserService.loadUser(oidcUserRequest);
return oidcUser;
};
}
}
它按预期工作,但我想禁用 JWT 授权部分的会话创建。我需要将其拆分为多个配置吗?我知道,如果我们有多个配置类,我们需要根据 URL 模式进行区分,在我的情况下我无法做到这一点,因为通过 OpenId 或通过 JWT 进行身份验证的用户仍然应该能够访问相同的 URL。
这是Github中的完整示例代码。
解决方案
我通过将配置分成两个类来解决。一个用于 OAuth 登录,另一个用于资源服务器。在资源服务器Configuration
http.requestMatcher(new RequestHeaderRequestMatcher("Authorization"))
类上进行配置,并将其 Order 设置为 1,Open Id 配置顺序设置为 2。在资源服务器配置中,我禁用了会话创建。
这样,如果任何外部客户端使用标头为“授权”的 JWT 令牌进行调用,则它将由资源服务器配置处理,否则将由第二个/OAuth 配置处理。
推荐阅读
- ios - 如何在一个视图中制作两个集合视图?
- android - 如何在 mpandroid 条形图中显示从负到正的值?
- php - 如何使用 preg_match_all 使用正则表达式模式将字符串转换为数组
- lua - 挂断代码在Lua中自由切换
- python - 迁移 admin.0001_initial 在其依赖 app.0001_initial 之前应用在数据库“默认”上
- gitlab - 当我手动运行管道时,Gitlab 会触发所有监听分支更改的作业吗
- node.js - 当 `npm install` 被赋予 `-g` 标志时,如何安装额外的 bin 文件?
- azure - ADF:adls 的数据流接收器活动文件格式
- php - 如何从查询中排除一些用户数据,laravel
- python - 如何在 seaborn 热图中用词汇填充 xticklabels?