密码重置令牌与会话凭证的区别
授权测试密码重置令牌:验证单次使用、有效期与账户绑定
密码重置令牌与会话凭证,虽然都叫“凭证”,但它们的职责、生命周期和失效条件完全不同。把两者混为一谈,是很多系统在账户安全设计上出问题的根源。
会话凭证解决的是“你是谁、你现在能不能继续操作”的问题。它通常在登录成功后签发,有效期一般较短,伴随用户的活动不断续期,退出登录或超时后即失效。它的核心特征是状态性:服务端需要记住这个会话,才能判断请求是否合法。而密码重置令牌解决的是“你有没有权利修改这个账户的密码”的问题。它是一次性、短时效、强绑定的授权凭证,签发后不依赖用户是否登录,也不该因为用户重新登录而继续有效。
两者的关键差异体现在三个维度。第一是用途边界:会话凭证只授权访问,不授权修改凭据;重置令牌只授权改密,不应被当作登录态长期使用。第二是失效条件:会话凭证在登出、超时或服务端撤销时失效,而重置令牌必须在消费后立即失效,同时还要在密码变更后连带撤销其他待用令牌。第三是绑定对象:会话凭证绑定的是登录主体和会话标识,重置令牌绑定的是账户标识和流程编号,两者一旦混用,就容易出现“用旧令牌反复改密”或“重置后旧会话仍可操作”的漏洞。
实际测试中,最常见的误判就是把“邮件链接还能打开”当作“令牌还有效”。链接能打开只能说明令牌未被消费,不能证明它还能完成改密。真正需要验证的是最终提交新密码这一动作是否被服务端接受,以及密码变更后其他待用凭证是否被正确撤销。同样,重置成功后旧登录会话是否保留,也属于独立的生命周期问题,不能与令牌失效混为一谈。
从修复角度看,服务端应当把两类凭证彻底分离治理。重置令牌必须采用安全随机生成、查表验证、单次消费,并在最终改密路径上执行期限校验;会话凭证则按账户恢复策略单独管理,必要时在改密后主动撤销既有会话。回归测试也应分别覆盖:正确账户可重置、已消费令牌不可重放、过期令牌不可提交、重置后旧令牌失效,以及重置后旧会话的处理是否符合产品约定。
判断一个系统的凭证设计是否健康,可以看它在密码重置后如何处理其他凭证:如果只是让旧令牌失效,却对已登录会话放任不管,说明会话撤销策略缺失;如果旧令牌在密码变更后仍能改密,说明消费与撤销逻辑没有原子化。凭证的生命周期管理,本质上是对“谁能改密码、谁能继续访问”这两条线的清晰切割,切割得越干净,账户被二次接管的风险就越低。

参与讨论
改密后旧会话还留着,这个场景确实容易被忽略