790 words
4 minutes
Web身份认证的核心机制
当你听到 Session, cookie, JWT, token, SSO, OAuth 时,是否曾有过疑问——这些都是什么?
这些术语都是用户身份管理(user identity management)的相关术语。当你登录网站时,需声明身份(identification),随后验证身份真实性(authentication),并授予所需权限(authorization)。
Sessions和Cookies
- Sessions: 会话(Session)用于在服务器上临时存储信息,以便在网站的不同页面间共享使用。
- Cookies: Cookie是存储在本地计算机上的客户端文件,其中包含用户相关信息。
NOTESession ID是一种引用令牌(Reference Token) 引用令牌:令牌本身不携带数据,仅作为服务端数据的访问凭证


优点
- Cookies 可减少服务器负载和内存消耗
- Cookies 数据存储在客户端,无需占用服务器端资源
- Cookies 可通过多服务器共享实现负载均衡与故障转移
- 基于 Cookie 的会话保持算法可将请求分发至不同服务器,并通过共享会话标识符(Session ID)实现故障转移
- Session ID 可通过结束会话使其失效(防止泄露后滥用)
- 服务端可主动销毁会话或设置过期时间,使泄露的 Session ID 无法继续使用
缺点
- 需持续进行内存或数据库查询以验证 Session ID
- 每次请求需查询服务器端存储的会话数据(如 Redis 或数据库),增加资源开销
- 存在跨站请求伪造(CSRF)风险
- 攻击者可利用用户已认证的 Cookie 发起伪造请求,需额外防护措施(如 CSRF Token)
Token
Session ID 和 Token 认证的主要区别是 Session 认证的认证信息是存在服务端的,而 Token 认证的认证信息是存在客户端的
JWT
JWT 是代表令牌的标准方式。由于此信息经过数字签名,因此可以验证和信任。由于 JWT 包含签名,因此无需在服务器端保存会话信息。
JWT 可以由客户端存储在本地存储、cookie、临时(运行时)、httpOnly cookie(无法通过 javascript 访问) 中。
优点
- JWT 减少了服务端侧的存储成本
缺点
- JWT 泄漏可能会带来问题,应安全存储和共享
- 可以在 JWT payload 中使用到期时间来减少 JWT 泄漏问题
SSO
SSO(Single Sign-On,单点登录)是一种身份验证解决方案,允许用户通过一次用户身份验证登录多个应用程序和网站
常见用法是在一个组织的多个不同网站中使用
SAML(Security Assertion Markup Language) Auth Request
<?xml version="1.0" encoding="UTF-8"?>
<saml2p:AuthnRequest
xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
AttributeConsumingServiceIndex="1"
Destination="https://yourdomain/broker/sp/saml/login"
ForceAuthn="true"
ID="_b6a016332e19a825bb42917c9870c93a"
IssueInstant="2021-03-09T10:26:17.210Z"
Version="2.0"
>
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
yourEntityID
</saml2:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
... XML Signature ...
</ds:Signature>
</saml2p:AuthnRequest>
SAML Assertion
一份包含用户信息和访问详细信息的加密签名的 XML 文档。
OAuth
OAuth 是一种开放标准授权协议或框架,为应用程序提供“安全指定访问”的能力。 通过使用 OAuth 2.0,您可以授权一个网站访问您在第三方网站上的信息。
Summary
Web身份认证的核心机制
https://fuwari.vercel.app/posts/web身份认证的核心机制/