← [ BACK_TO_NOTES ]

Java 认证与 JWT 概览

Java Web 服务中 JWT 作为短期访问凭证时的职责边界,以及它与 Session、Refresh、Authentication 和 Authorization 的关系。

#concept #growing #dev #java

[!info] related notes

Java 认证与 JWT 概览

一句话理解

在 Java Web 服务中,JWT 常被用作短期 Access Token,但 JWT 只是凭证格式。是否维护 Server-side Session、是否每请求查询状态、如何 Refresh 与 Revoke,是独立的认证架构决策。

四层不要混淆

Authentication
→ 当前请求代表谁

Authorization
→ 这个身份能做什么

Session / Grant
→ 长期登录生命周期是否仍有效

JWT
→ 某个 Token 采用什么可签名验证格式

常见两种实现

Pure Stateful Session

Browser Cookie
→ opaque Session Token
→ Server-side Session lookup

不需要 JWT,也能完成完整登录、注销和设备撤销。

Hybrid

normal API
→ short-lived Access JWT
→ Resource Server local verification

refresh/logout/revoke
→ Refresh Token
→ Auth Server checks Session / Grant

这允许普通请求不访问 Session Store,同时长期生命周期仍可被服务器控制。

Bearer 只是传输方式

Authorization: Bearer <token>

Bearer 表示“持有者凭证”语义;里面可以是 JWT,也可以是 opaque token。解析 Header 不等于认证成功,后端仍需要验证对应凭证。

JWT 验证

真实实现应使用成熟库,并至少根据场景验证:

  • signature;
  • allowed algorithm;
  • exp / nbf;
  • iss;
  • aud。

普通签名 JWT 的 Payload 可以被读取,不能把密码、密钥等秘密放进去。

Authorization 不能只看“有 Token”

即使 Access Token 中有:

sub = user-42
role = admin

资源级权限仍可能依赖当前数据库状态。例如用户是否属于某个 Tenant、是否拥有某个 Order、资源是否已经锁定。

Spring Security 等框架可以帮助建立 Authentication / Authority Context,但不会自动替代领域级 Policy。

Refresh 与撤销

Refresh Token 不要求是 JWT。它可以是 opaque random credential,并绑定服务端 Session / Grant。

短期 Access JWT 在本地验证模式下,Session 被撤销后可能继续有效到 exp。如果业务要求即时撤销,需要每请求实时状态检查、denylist/introspection,或对敏感操作单独增加实时验证。

常见误区

  • “JWT = 无状态登录方案” → JWT 只是格式,系统仍可有 Session/Grant。
  • “JWT = Bearer Token” → Bearer 是携带语义,JWT 是格式。
  • “有 Token 就完成授权” → 仍需 Authorization。
  • “Session 是旧技术” → 不是;它仍是非常自然的可撤销登录状态模型。

最短记忆

Java/Spring 中先设计 Authentication、Session 生命周期和 Authorization,再决定 Access Token 是否使用 JWT;不要从 JWT 反推整套认证架构。

创建于 2026/7/15 更新于 2026/9/30
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本