Java 认证与 JWT 概览

认证与鉴权边界、JWT 常见用法与风险:服务间如何传递身份。

#type / concept #status / growing #tech / dev #resource / java

[!info] 关联笔记

Java 认证与 JWT 概览

这个概念为什么出现

API 需要知道“谁在调用、能否做”。会话 Cookie、Token、JWT、mTLS 是不同机制。JWT 常被用于无状态传递身份声明,但误用会导致无法吊销与算法漏洞。

[!abstract] 一句话理解 认证确认身份,授权判定权限;JWT 是一种可验证的声明格式,不是自动安全方案,必须校验签名、受众、过期并保护密钥。

最小可运行示例

场景:从 Authorization 头解析 Bearer 形态(不验证签名的教学骨架)

public class BearerParse {
    static String extract(String authorizationHeader) {
        if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
            throw new IllegalArgumentException("missing bearer");
        }
        String token = authorizationHeader.substring("Bearer ".length()).trim();
        if (token.isEmpty()) throw new IllegalArgumentException("empty token");
        return token;
    }
    public static void main(String[] args) {
        System.out.println(extract("Bearer abc.def.ghi"));
    }
}
javac BearerParse.java && java BearerParse

期望:

abc.def.ghi

真实系统必须用库验签(jjwt 等)并检查 exp/iss/aud

结合场景再看三个关注点

  1. 解析 ≠ 认证成功
  2. 密钥与算法白名单
  3. 授权要基于声明与策略,不是“有 token 就放行”。

核心概念与准确模型

1. 认证/授权

2. JWT 结构 header.payload.signature

3. 会话 vs 无状态权衡(吊销、隐私、长度)

边界情况与反直觉行为

  1. alg=none 历史漏洞。
  2. 敏感数据勿塞 payload(可解码)。
  3. 时钟偏移影响 exp。

常见误区

[!warning] 常见误区:JWT 自动加密 默认只签名;内容可读除非 JWE。

工程实践

  1. 短过期 + 刷新策略。
  2. HTTPS only。
  3. 权限变更的吊销方案。
  4. 安全库勿自写加密。

本节总结

  • 认证授权分离
  • JWT 是工具有风险
  • 验签与声明检查

自测题

  1. 认证与授权差别?
  2. 为什么 payload 不能放密码?
参考答案
  1. 你是谁 vs 你能做什么。
  2. JWT 常仅 Base64 编码可被解码,且可能落日志。

延伸阅读与资料来源

资料类型支撑内容
RFC 7519 JWT标准JWT
OWASP Auth Cheat Sheet安全认证实践
创建于 2026/7/15 更新于 2026/7/15