把续取凭据与资源访问分开
客户端用访问令牌请求资源,用刷新令牌向授权服务器请求新访问令牌。RFC 6749将刷新令牌签发设为可选;没有刷新令牌不表示协议失败,也不能把访问令牌过期理解为服务必须永远允许续期。
这种分工可让访问令牌较短有效,并把续取能力保留在另一条受保护通道。客户端认证要求还取决于客户端类型及政策,刷新令牌不能作为普通资源请求的万能凭据发送到各个服务。
参考:[1]
轮换保存旧新凭据之间的联系
RFC 9700要求公开客户端的刷新令牌采用发送者约束,或以轮换检测重放。轮换时,每次成功刷新发出新刷新令牌,使前一个失效,同时保留它们所属授权关系的信息,而不是把旧值当成从未存在过。
若失窃的同一刷新令牌先后被合法客户端和攻击者使用,一方会再次提交已经失效的值。服务器据此发现问题,却通常不能仅从这次提交判断哪一方是攻击者;规范描述撤回仍活动的刷新令牌,并要求合法客户端重新取得授权。
参考:[2]
续取能力也受范围和撤回约束
授权服务器须根据风险决定是否签发,并把刷新能力绑定到资源所有者同意的范围与资源服务器。刷新不是重新授权的替身,不能借换取新令牌把原本只允许的部分资料悄悄扩展成整个账户。
刷新令牌还可以因安全事件被撤回,或在一段时间未用后到期。保存得更久不保证服务端一直接受;令牌存储、失效传播和重新授权流程共同决定“保持连接”实际能持续多久。
参考:[2]