← [ BACK_TO_NOTES ]

Credential Change & Session Revocation

密码重置、邮箱/MFA 变更和账户恢复会改变认证信任边界,因此必须显式决定旧 Session、Refresh Token family、remembered device 与 Access Token 的撤销/降级语义;前端清 Cookie 不等于服务端撤销,短期 Access Token 可能存在可接受的 stale window。

#synthesis #evergreen #auth

[!info] related notes

Credential Change & Session Revocation

一句话关系

Credential change 是认证状态变化。

因此每次:

  • password reset;
  • email change;
  • MFA reset;
  • account recovery;
  • security incident;

都必须回答:

旧 Session / Refresh Credential / trusted-device state 还能不能继续用?

前端 Logout 不等于 Revocation

浏览器删除 Cookie 或本地 Token,只删除当前客户端副本。

如果服务端 Session 仍有效,攻击者手里复制的同一个 credential 仍可继续使用。

所以真正 revoke 必须发生在服务端 authority。

Server-side Session

如果使用 opaque Session:

session store → revoked_at / delete

可以立即终止对应 Session。

“退出所有设备”:

user_id → enumerate/revoke all active sessions

需要有 user→sessions secondary index 或等价查询能力。

Refresh Token / Grant

Hybrid 模型:

Access Token → short-lived fast path

Refresh Token / Session Grant → long-lived authority

Password reset 后可以:

revoke all refresh families → no new Access Token can be minted

但当前已签发 Access Token 可能在 TTL 内仍可继续使用。

Access Token Stale Window

如果 Access Token 是自包含 JWT 且普通请求不查 server state:

password reset at T0 → old access JWT may remain valid until exp

这是明确的 stale window。

收口方式包括:

  • very short access TTL;
  • credential/security version claim + online check;
  • denylist;
  • session authority check;
  • event-driven revocation cache。

选择取决于即时撤销要求和性能预算。

Credential Version / Security Stamp

可以维护:

user.security_version

Token/Session 创建时记录:

security_version = 7

Password reset / MFA reset: → increment to 8

请求或 refresh 时:

credential version mismatch → reject

它表达的是:

这个认证状态是在旧安全配置下签发的。

但如果普通 Access Token 完全离线验证,又不查询 version,仍然存在 stale window。

Password Change vs Password Reset

已认证用户主动 change password 与 forgot-password recovery 风险等级不同。

Normal Password Change

  • require recent reauthentication;
  • revoke other sessions;
  • optionally keep current trusted session after rotating Session ID。

Recovery Reset

  • assume higher compromise probability;
  • revoke all Sessions / Refresh families;
  • require fresh normal login。

没有唯一答案,但必须显式区分。

MFA Change

新增/删除 MFA authenticator 属于 security-critical event。

建议:

  • recent strong reauthentication;
  • revoke/step-down sessions that lack new assurance;
  • update session assurance metadata;
  • notify user;
  • consider revoke remembered-device trust。

Email Change

Email 可能用于 recovery、login identifier 和 notification。

成功变更后,长期 Session 是否继续有效取决于产品模型。

高风险系统可以:

  • regenerate Session ID;
  • require reauth;
  • invalidate recovery state;
  • revoke risky sessions。

Remembered Device

“Remember this device” 本质上也是 credential / trust state。

Account recovery 后不应忘记评估:

  • remembered-MFA bypass cookie;
  • trusted-device token;
  • device binding;
  • long-lived browser grant。

否则 revoke Session 但保留 MFA bypass token,仍可能留下后门。

Notification

Credential change 后应记录并通知:

  • password changed;
  • email changed;
  • MFA changed;
  • recovery performed;
  • sessions revoked。

通知属于 compromise detection,不替代 authorization。

Audit Event

至少记录:

  • account;
  • event type;
  • time;
  • actor/session;
  • IP/device context;
  • revoked session count;
  • recovery method;
  • reason/policy version。

不要记录 raw secret/token。

学习检查

  1. 为什么清浏览器 Cookie 不等于 server-side revocation?
  2. Hybrid 架构中 password reset 后为什么 Access Token 可能仍有 stale window?
  3. security_version 能解决什么,不能解决什么?
  4. normal password change 与 recovery reset 的 Session policy 为什么可以不同?
  5. MFA change 为什么要重新评估 Session assurance?
  6. remembered-device token 为什么也属于 credential revocation 范围?
  7. 设计一个“账户疑似被接管后 reset password + revoke all sessions”的完整状态转换。
创建于 2026/9/30 更新于 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
关闭浮层 / 取消命令;输入框内清空文本