LarryDpk
发布于 2021-01-14 / 2740 阅读 / 0 评论 / 0 点赞

调试Http Basic认证,用base64加密解密

1 HTTP Basic认证

HTTP Basic认证是在HTTP 1.0就引入的认证方案,存在安全缺陷;但由于实现简单,仍有项目在用。

它主要通过请求头Authorization来做认证,格式为:

键:Authorization

值:Basic base64(username:password),即Basic 加密串,如Basic dXNlcjp1c2Vy

Spring Security的配置可以为:

@EnableWebFluxSecurity
public class WebfluxSecurityConfig {
  @Bean
  public MapReactiveUserDetailsService userDetailsService() {
    UserDetails user = User.withDefaultPasswordEncoder()
      .username("user")
      .password("user")
      .roles("USER")
      .build();
    return new MapReactiveUserDetailsService(user);
  }

  @Bean
  public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
    http.httpBasic()
      .and()
      .authorizeExchange()
      .anyExchange().hasRole("USER")
      .and()
      .formLogin()
      .and()
      .csrf().disable();

    return http.build();
  }
}

2 如何加密解密

命令如下:

# 加密
$ echo -n 'user:user' | openssl base64
dXNlcjp1c2Vy

# 加密
$ echo -n 'user:user' | base64
dXNlcjp1c2Vy

# 加密
openssl base64 -in <infile> -out <outfile>

# 解密
$ echo -n 'dXNlcjp1c2Vy' | base64 -d

当然也可以通过代码加密/解密。

3 访问

3.1 Postman访问

通过Postman可以直接输入用户名和密码访问,其实它也是帮你自动加个请求头而已。所以要请求,自己不需要再添加请求头Authorization了,免得覆盖了。

3.2 命令行访问

通过curl访问如下:

$ curl http://localhost:8088/user/name -H 'Authorization:Basic dXNlcjp1c2Vy'