Cookie、Session、Token 与登录验收

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

Cookie 是浏览器存储和传输机制,Session 是会话状态,Token 是凭证。它们不是互斥方案:Cookie 可以保存 Session ID,也可以保存 Token。 HTTP 是 Hypertext Transfer Protocol(超文本传输协议)。

1. 登录链路与选择#

登录/身份回调 → 服务端验证身份 → 创建会话或签发凭证
→ Set-Cookie 或受控返回 Token → 后续请求携带凭证
→ 验证有效性、用户与租户权限 → 返回业务数据
→ 续期/注销/撤销
方案 优点 必须解决
不透明 Session ID + 服务端状态 易集中撤销、更新权限 会话存储可用性、过期与清理、会话固定攻击
短期访问 Token 适合 API/服务间调用 泄露、过期、作用域、受众、轮换与撤销策略
JWT(JSON Web Token,JSON Web 令牌) 可在服务端本地验证签名和声明 签名不等于加密;须校验允许算法、签发者、受众、有效期,不能只 Base64 解码

注销不一定立即作废已签发的无状态访问 Token,要明确短有效期、撤销列表或令牌内省策略。JWT 的格式不保证业务授权正确。JWT 标准。

会话 Cookie 常用 Secure; HttpOnly; Path=/; SameSite=Lax;具体 SameSite 取决于登录回调和嵌入流程。__Host- 前缀要求 Secure、Path=/、不设置 Domain,适合限制主机范围。

  • HttpOnly 防止脚本直接读取 Cookie,不会阻止恶意脚本借浏览器发已登录请求。
  • 跨站 Cookie 通常需 SameSite=None; Secure,仍受第三方 Cookie 策略限制;跨源不一定跨站。
  • Cookie 自动附带时,需要 CSRF(Cross-Site Request Forgery,跨站请求伪造)防护;检查 Origin/CSRF token,避免 GET 修改业务。
  • localStorage 中的 Token 可被同源脚本读取,要考虑 XSS(Cross-Site Scripting,跨站脚本)风险;不要为“方便”长期保存高权限凭证。

依据:OWASP 会话管理。

3. Hands-on:真实登录流程验收#

准备预发布站点、两个测试账号 A/B(不同租户)、管理员提供的过期/撤销策略,以及无副作用的 /account 类查询路径。已有身份工程可使用 Keycloak 实战。不假设所有系统都有用户名密码 POST 接口。

  1. 开一个独立浏览器配置文件,打开 Network Preserve log 和 Application/Storage。登录 A,确认凭证不出现在 URL、前端日志、错误追踪中;只记录 Cookie 属性,不复制值到工单。
  2. 观察登录前后 Session ID 是否更新;检查 Secure、HttpOnly、SameSite、Domain、Path 与过期时间。发生身份提升时也应更新会话。
  3. 在该站点 Console 执行只读检查,替换路径:
var accountResponse = await fetch('/account', {
  credentials: 'include', cache: 'no-store',
  signal: AbortSignal.timeout(10000)
});
console.log(accountResponse.status, accountResponse.headers.get('Cache-Control'));

应返回当前 A 的信息且不进入共享缓存。API 可能返回 JSON 401,页面可能跳登录;按契约验收,不统一要求所有路径都是 401。

  1. 另开独立浏览器配置文件登录 B,尝试访问仅用于测试的 A 资源 ID:应 403 或隐藏式 404,不能返回 A 数据。不要靠隐藏按钮实现隔离。
  2. 正常注销 A,再执行上述查询;应不再访问原会话资源。验证旧凭证撤销需在受控测试工具中重放,凭证只存本地权限 0600 文件,不贴入命令行参数/聊天;无此工具则不把服务端撤销标为已验收。
  3. 在预发布缩短会话有效期,等待到期后重测查询与刷新;验证并发刷新、刷新令牌轮换、撤销后再次刷新均符合约定。记录实际策略,恢复原过期配置。
  4. 用应用提供的测试表单/自动化用例发送缺少 CSRF token 的业务修改请求,预期拒绝;有效 token 应成功。身份已过期导致的拒绝不能冒充 CSRF 防护通过。

4. 常见故障与收尾#

现象 排查
登录后立刻未登录 Cookie 域/路径、Secure、SameSite、代理识别协议、跨源 credentials
只在部分实例掉线 会话存储共享与可用性、签名密钥轮换、时钟偏差
注销后仍能调用 客户端删除与服务端撤销是否混淆;访问 Token 剩余有效期
B 能读取 A 服务端租户授权、对象级权限、缓存隔离

恢复测试配置,注销测试会话、撤销临时凭证,清除浏览器测试数据。不要保存带 Cookie 的 HAR(HTTP Archive,请求归档)作为公开证据。跨域链路见 浏览器跨域时序。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭