← 中文资源

简体中文版本

用 DPoP 将令牌绑定到客户端

使用持有性证明密钥,使被盗的持有者令牌无法在另一台机器上重放,并在资源服务器校验证明及其重放 id。

阅读英文原文

概述

持有者令牌只需被复制即可被重放。DPoP 把令牌绑定到一个客户端私钥,要求每个请求附带签名证明,资源服务器校验签名、令牌指纹与 jti,从而让单纯持有令牌的窃取者无计可施。

关键步骤

  1. 生成客户端密钥对,在令牌请求中随 DPoP 证明发送公钥。
  2. 每个 API 请求附带新鲜的 DPoP 证明。
  3. 在资源服务器校验证明签名、令牌指纹与 jti 重放 id。
  4. 拒绝证明与令牌绑定不符的请求。

验证

  • 单独持有令牌无法调用接口。
  • 重放同一证明被拒绝。
  • 证明签名与令牌指纹均被校验。
  • 时钟偏差在容忍窗口内不误伤。

注意事项

  • DPoP 需要客户端管理密钥并为每请求附带证明,复杂度上升。
  • 并非所有客户端都支持,迁移期可能需要同时接受持有者与 DPoP 令牌。

适用范围

本条目围绕「用 DPoP 将令牌绑定到客户端」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

const proof = await makeDpopProof({ htm: 'GET', htu: url, key: privateKey });
fetch(url, {
  headers: { Authorization: `DPoP ${token}`, DPoP: proof },
});