跳到主内容
快讯直播
AI智模界
AI 词典

DPoP:让偷来的令牌变成废纸

一句话定义

DPoP(Demonstrating Proof-of-Possession,持有证明)是 OAuth 2.0 的一个扩展,让客户端在每次调用接口时用自己保管的私钥对请求签名,证明"我确实拿着这把钥匙",而不只是"我拿到了这串令牌"。

为什么需要它

传统 OAuth 发下来的是 access token(访问令牌),属于 bearer token(持有者令牌)——名字很直白:谁拿着它,谁就是主人。它像一张不记名的现金券,掉在地上被人捡走,捡到的人照样能花。日志泄露、浏览器 XSS、手机装了恶意应用,都可能让令牌落到别人手里,攻击者拿去调接口,服务端看不出任何区别。

DPoP 怎么解决

思路是给令牌上一把"指纹锁":

1. 客户端第一次运行时生成一对密钥,私钥留在本地(手机安全芯片、App 的密钥库),永远不外发。

2. 每次请求,客户端用私钥对这次请求的关键信息签名——HTTP 方法、目标地址、时间戳、随机数等,生成一段叫 DPoP proof 的签名串,放进请求头。

3. 授权服务器发令牌时,把这个令牌和客户端的公钥绑定,令牌里留下一枚"公钥指纹"。

4. 资源服务器每次收到请求,验两件事:签名对不对?令牌里绑的公钥指纹,和这次 proof 里的公钥是不是同一把?

这样,攻击者偷到令牌也没用——他没有对应私钥,签不出合法 proof。而且 proof 绑定了地址、方法和时间戳,既不能换个接口用,也不能无限期重复使用。

打个比方:bearer token 像一张写着"凭此券入场"的纸质票,谁拿着都能进;DPoP 像门票绑定本人,每次入场都要现场按指纹,指纹对不上,票就是废纸。

和相邻概念的区别

Bearer AI 词典:Token">TokenDPoP
谁能用任何持有令牌的人只有同时持有私钥的人
令牌泄露后果可被直接重放基本无法使用
客户端要求无生成并保管密钥对
额外开销无每次请求多一次签名与验签

PKCE 保护的是"授权码换令牌"那一步,防授权码被截胡;DPoP 保护的是之后每一次资源请求,两者管的是不同环节,常一起用。mTLS(双向 TLS)也能做令牌绑定,安全性很好,但要维护证书体系,在移动端和浏览器里部署麻烦;DPoP 只在应用层加一对密钥,门槛低得多。另外它虽然也叫 proof,方向却相反:不是服务端签名给客户端验,而是客户端签名给服务端验。

对从业者和普通人的意义

做身份认证和网关的工程师要注意:接入 DPoP 意味着授权服务器和资源服务器都得支持校验,还要处理时间窗口、重放缓存、时钟偏差这些细节,排障成本得提前算进去,各家支持情况以官方文档为准。

对普通人来说,好处是隐形的:手机丢了、某个 App 的令牌被人顺走,对方也没法拿着它去读你的数据。安全模型从"谁捡到钥匙谁开门",变成了"钥匙必须和锁配对"。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。