在 Spring Boot 中使用令牌保护 api
Posted
技术标签:
【中文标题】在 Spring Boot 中使用令牌保护 api【英文标题】:Securing a api with an token in Spring Boot 【发布时间】:2019-08-29 13:08:52 【问题描述】:我们有一个简单的应用程序,只有两个消费者和 5 个端点。对于一个端点,我需要某种身份验证方式。我喜欢这样做的条纹方式,但我不知道如何在 Spring Boot 中构建它。
“API 的身份验证是通过 HTTP Basic Auth 执行的。提供您的 API 密钥作为基本身份验证用户名值。您不需要提供密码。”
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http
.authorizeRequests()
.antMatchers("/qr")
.hasRole("user")
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.httpBasic()
.and()
.csrf()
.disable();
@Bean
public UserDetailsService userDetailsService()
val encodedPassword = new BCryptPasswordEncoder().encode("test");
final InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withUsername("admin").password(encodedPassword).roles("user").build());
//manager.createUser(User.withUsername("admin").roles("user").build());
return manager;
@Bean
public PasswordEncoder passwordEncoder()
return new BCryptPasswordEncoder();
我试图从 manager.createUser 中删除密码,但这不起作用。
【问题讨论】:
【参考方案1】:基本身份验证由 user:password
以 base64 编码形式组成。
因此,您的用户必须有一个等于 空字符串 的密码,基本身份验证才能工作。
您也可以摆脱 BCryptPasswordEncoder 并使用NoOpPasswordEncoder,因为您不使用密码值。
【讨论】:
以上是关于在 Spring Boot 中使用令牌保护 api的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot - Spring Security CSRF 保护未在登录页面中注入令牌
Spring Boot with Spring Boot:将基本身份验证与JWT令牌身份验证相结合[复制]
如何使用 API 密钥和秘密保护 Spring Boot API
我可以有两个 Spring Security 配置类:一个使用基本身份验证保护一些 API,另一个使用 JWT 令牌保护 API?