790 words
4 minutes
Web身份认证的核心机制
2025-03-07
No Tags

当你听到 Session, cookie, JWT, token, SSO, OAuth 时,是否曾有过疑问——这些都是什么?

这些术语都是用户身份管理(user identity management)的相关术语。当你登录网站时,需声明身份(identification),随后验证身份真实性(authentication),并授予所需权限(authorization)。

Sessions和Cookies#

  • Sessions: 会话(Session)用于在服务器上临时存储信息,以便在网站的不同页面间共享使用。
  • Cookies: Cookie是存储在本地计算机上的客户端文件,其中包含用户相关信息。
NOTE

Session 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身份认证的核心机制/
Author
time
Published at
2025-03-07