Web 认证授权技术的演进时间线

5 阅读4分钟

整个Web 认证授权技术的演进时间线

史前时代:HTTP Basic Auth (1990s)

Authorization: Basic dXNlcjpwYXNzd29yZA==

背景:早期 Web 只需要简单的访问控制。 机制:Base64 编码用户名密码,随每个请求发送。

致命缺陷:

  • 明文传输(仅编码未加密)
  • 无法主动登出(浏览器记住凭据直到关闭)
  • 跨域困难

现状:仅用于内部系统或 API 快速测试,配合 HTTPS 勉强生存。


第一代:Cookie + Session (1994-2000s)

1994年:Netscape 工程师 Lou Montulli 发明 Cookie,解决 HTTP 无状态问题。

典型流程

客户端 ──登录──→ 服务端创建 Session(内存/Redis/DB)
        ←─Set-Cookie: SESSION_ID=abc123──
        ──后续请求携带 Cookie──→ 服务端查 Session 表验证

解决的问题

  • 状态保持:用户不必每次请求都输密码
  • 安全性提升:密码只传一次,之后用随机 SessionID
  • 可控登出:服务端销毁 Session 即可强制下线

架构痛点(2000s后期暴露)

  • 有状态:Session 粘滞,水平扩展困难(需 Redis 共享 Session)
  • 移动端困境:原生 App 不擅长处理 Cookie,跨域受限(CORS 严格)
  • 微服务灾难:每个服务都要访问集中式 Session 存储,成为瓶颈

第二代:Token 时代 - JWT (2010)

背景:RESTful API 兴起,前后端分离成为主流,需要无状态认证。

2010年:IETF 标准化 JWT (JSON Web Token) ,基于 2007 年的 JWS/JWE 标准。

革命性改变

服务端不再存 Session!
登录成功颁发 JWT(含签名),客户端存储(LocalStorage)
后续请求携带 JWT,服务端仅验签即可确认身份

优势

  • 真正的无状态:任意服务实例可独立验证 Token,水平扩展无压力
  • 跨域友好:Token 放在 Header,不受 Cookie 同源策略限制
  • 移动端天然适配:App 直接存内存或 Keychain

代价与问题

  • 无法主动吊销:JWT 一旦颁发,在过期前一直有效(需配合黑名单/短有效期)
  • 体积膨胀:比 SessionID 大得多(可能几 KB),频繁请求浪费带宽
  • XSS 风险:存在 LocalStorage 易被 JS 窃取(vs Cookie 的 HttpOnly)

第三代:第三方授权 - OAuth 演进

OAuth 1.0 (2007)

背景:Web 2.0 时代,用户需要让第三方应用(如 Flickr 图片上传到 Twitter)访问其数据,但不能给第三方密码。

特点:复杂,需计算签名(HMAC-SHA1),已被淘汰。

OAuth 2.0 (2012) ★ 现代基石

RFC 6749 发布,大幅简化,放弃加密签名,依赖 HTTPS。

核心创新

  • 授权码模式 (Authorization Code) :最安全的第三方登录流程
  • Access Token:短期访问令牌(如 2 小时)
  • Refresh Token:长期刷新令牌(如 30 天),用于获取新的 Access Token

解决的问题

  • 用户不必向第三方应用透露密码
  • 可随时在授权服务器撤销权限
  • 细粒度权限控制(Scope:只读/读写)

误区澄清:OAuth 2.0 设计初衷是授权(Authorization),不是认证(Authentication)!但现实中被广泛用于"使用微信/谷歌登录"。

OpenID Connect (2014)

背景:OAuth 2.0 没有标准化"用户信息获取",各家实现混乱。

OIDC = OAuth 2.0 + ID Token (JWT)

  • 在授权流程中增加 openid scope
  • 颁发 ID Token(含用户基本信息的 JWT)
  • 标准化 /userinfo 端点

意义:终于有了一套标准的身份认证协议,打通"第三方登录"和"单点登录(SSO)"。


并行发展:单点登录 (SSO)
  • SAML (2005) :企业级 XML 协议,重,主要用于企业 AD 集成
  • CAS (2004) :Yale 大学开发的中央认证服务,教育界常用
  • OIDC (2014) :现代 Web SSO 的事实标准,取代 SAML 大部分场景

现代趋势:无密码与去中心化 (2020s)

WebAuthn / Passkey (2019-)

FIDO2 标准,用生物识别/硬件密钥替代密码:

  • 私钥存于设备安全芯片(TPM/Secure Enclave),公钥注册到服务端
  • 彻底杜绝钓鱼攻击(域名绑定)和数据库泄露(无密码可泄)
  • 苹果/谷歌/微软共同推动,iOS 16/Android 14 原生支持

隐私计算与去中心化身份 (DID)

  • Verifiable Credentials:用户自持身份凭证,选择性披露
  • Web3 钱包:MetaMask 等作为身份入口,挑战传统 OAuth 体系

技术选型简史总结

年代主流方案适用场景淘汰原因
1990sHTTP Basic简单系统安全性差
2000sCookie/Session传统 Web 单体应用微服务/移动端不适应
2010sJWT + OAuth 2.0前后端分离、移动端、第三方登录无状态带来的吊销难题
2020sOAuth 2.1 + Passkey现代 Web/移动应用逐步淘汰密码

关键设计矛盾(至今仍存在)

  1. 有状态 vs 无状态:Session 可控但难扩展,JWT 易扩展但难吊销
  2. 安全 vs 体验:短 Token 安全但频繁登录,长 Token 体验好但风险高
  3. 中心化 vs 去中心化:传统 IAM vs Web3 身份

现代最佳实践

  • Web 应用:Cookie(HttpOnly/Secure/SameSite)+ Session(Redis)或 短有效期 JWT
  • 移动/API:OAuth 2.0 + JWT(Access Token 短,Refresh Token 长)
  • 高安全场景:Passkey/WebAuthn 无密码认证