spring-boot - 如何支持 REST API 项目的基本认证和承载认证
问题描述
我是 Spring Security 的新手并且仍在学习它,所以我的问题可能很幼稚,请耐心等待。
我有 Sprint Boot Rest API 项目,它公开了某些 API。我已经为所有 API 实现了基于不记名令牌的身份验证。例如 /user 、 /resource 、 /appointment
现在对于特定控制器的少数 api,我希望实现基本身份验证。这些 API 将被另一个不公开的服务使用。为了获得 API 的安全性,我希望为这些 api 设置基本身份验证。例如 /internal/api1 , internal/api2 .. 等等
我无法区分ResourceServerConfigurerAdapter和WebSecurityConfigurerAdapter中的 url 。也不确定应该使用哪个来添加basicAuth()使用 antmatchers
解决方案
通过阅读您的问题,您想要的是为两个不同的端点提供两种身份验证类型(令牌和 httpBasic)。它可以通过创建两个不同的 WebSecurityConfigurerAdapter bean 来实现。Spring Boot 实现了这一点,可以像下面这样完成:
- @Order(1) - /resource|user|appointment/** 受不记名令牌身份验证保护。
- @Order(2) - /internal/** 受基本身份验证保护。
在此处查看Spring Boot的文档和示例代码。
@EnableWebSecurity
public class SecurityConfig {
@Configuration
@Order(1)
public class ApiSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/resource/**")
.antMatcher("/user/**")
.antMatcher("/appointment/**")
.authorizeRequests()
.anyRequest().authenticated()
.and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().addFilterBefore(jwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}
}
@Configuration
@Order(2)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/internal/**")
.and()
.httpBasic();
}
}
}
推荐阅读
- python - 更改 1 列,其余部分保持不变
- bash - 使用 SCP 的语法是否发生了变化?在较新的服务器上出现意外的文件名错误
- c++ - 下面的代码输出 1 和 0 但是我不知道为什么
- javascript - 在 React 中显示图像文件夹
- sockets - WiFiP2PManager 连接 WiFiP2PConfig - 将端口号传递给客户端?
- c++ - SIMD C++ AVX2 Intrinsics 获取具有 16 位整数的 __m256i 向量的总和
- google-apps-script - 对 directory.members.insert 的 API 调用失败并出现错误:找不到资源:groupKey
- android - 使用 XML 中的背景属性不会更改按钮颜色
- html - 当用户输入 x 时,如何让 x 数量的输入框出现?
- python - How to add a row to every group with pandas groupby?