Basic 认证
Authorization 头;仅 HTTPS 场景。
20 分钟
Basic 认证
HTTP Basic Authentication 把 用户名:密码 做 Base64 编码放进 Authorization 头——实现极简,适合 机器对机器、内网工具、临时保护,不适合作为面向公众的 主登录方式。后端工程师应知道如何启用、为何 必须 HTTPS,以及何时改用 Token 或 OAuth。
学习目标
- 构造与解析
Authorization: Basic ...头 - 在 Spring Security 中配置 HTTP Basic 与关闭 CSRF 的场景
- 判断 Basic 是否适合当前 API 场景
协议格式
GET /api/internal/metrics HTTP/1.1
Host: api.example.com
Authorization: Basic dXNlcjpwYXNzd29yZA==
dXNlcjpwYXNzd29yZA== 解码为 user:password。Base64 不是加密,HTTP 明文传输等于 公开密码。生产 仅允许 HTTPS(sec-ssl)。
细节见 http-headers 中 Authorization 一节。
浏览器行为
访问受 Basic 保护的 URL 时,浏览器弹 原生登录框,成功后 自动带头 直到关闭标签。SPA 通常 不用 Basic 做主登录(体验差、难做 SSO)。
Spring Security 示例
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/actuator/**").hasRole("OPS")
.anyRequest().authenticated())
.httpBasic(Customizer.withDefaults());
配合 内存或 DB 用户:
@Bean
public UserDetailsService users(PasswordEncoder encoder) {
UserDetails ops = User.builder()
.username("ops")
.password(encoder.encode(System.getenv("OPS_PASSWORD")))
.roles("OPS")
.build();
return new InMemoryUserDetailsManager(ops);
}
密码仍应 bcrypt 存储(sec-hash),环境变量 轮换。
适用场景
| 适合 | 不适合 |
|---|---|
| 内部运维接口、短期 PoC | 移动端 / SPA 主登录 |
| curl / 脚本调 API | 需要 refresh、细粒度 scope |
| 开发环境快速挡一层 | 跨域前端(预检 + 凭据复杂) |
面向用户的认证优先:、、()。