在 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 中从 jwt 获取附加属性

Spring Boot with Spring Boot:将基本身份验证与JWT令牌身份验证相结合[复制]

在 Spring Boot 中扩展 Keycloak 令牌

如何使用 API 密钥和秘密保护 Spring Boot API

我可以有两个 Spring Security 配置类:一个使用基本身份验证保护一些 API,另一个使用 JWT 令牌保护 API?