Token 如何绑定设备:防止泄漏后跨设备使用

普通 Bearer Token 的规则很简单:谁拿到 Token,谁就能调用接口

因此,Token 一旦被日志、代理、恶意软件或客户端漏洞窃取,攻击者通常可以把它复制到另一台设备继续使用。解决这类问题的技术一般叫:

  • 设备绑定:Device Binding

  • 发送方约束 Token:Sender-Constrained Token

  • 持有证明 Token:Proof-of-Possession Token,简称 PoP Token

核心目标不是保证 Token 永不泄漏,而是让攻击者只有 Token 仍然无法发起有效请求

一、不要只绑定 device_id

最常见的做法是在请求中同时携带 Token 和 device_id

Authorization: Bearer <token>
X-Device-ID: <device_id>

这种方式只能识别设备,不能证明请求真的来自该设备。攻击者拿到 Token 时,往往也能复制 device_id、请求头和客户端参数。

弱绑定与强绑定对比

真正可靠的绑定必须依赖攻击者难以复制的凭证,通常是保存在设备安全区中的不可导出私钥

服务器绑定的是设备公钥或公钥指纹;私钥始终留在客户端,不应上传。

二、设备绑定的基本流程

App 首次安装时生成非对称密钥对:

  • Android:Android Keystore,条件允许时使用硬件安全模块或 StrongBox

  • iOS:Keychain / Secure Enclave

  • Web:Web Crypto、WebAuthn 或 DPoP,但需要额外考虑 XSS 对密钥的威胁

用户登录后,服务端将 Refresh Token 或整个会话绑定到公钥指纹。后续请求除了携带 Token,还要附带由设备私钥生成的签名。

Token 设备绑定总体流程

签名内容通常包含:

HTTP Method + URI + Token Hash + Timestamp + Nonce

服务端需要同时验证:

  1. Token 是否有效、是否过期、是否已撤销。

  2. 签名公钥是否与 Token 绑定的公钥一致。

  3. 时间戳是否处于允许窗口。

  4. Nonce 或请求唯一标识是否已经使用,防止重放。

攻击者即使复制了 Token,也无法在另一台设备上生成合法签名。

三、业内常绑定哪些信息

设备绑定通常分为三层:密码学强绑定、辅助风控和异常处置。

sdghfhgjh.png

信息

主要作用

能否单独防止 Token 搬运

设备公钥、公钥指纹

证明客户端持有设备私钥

可以,属于核心绑定

App 安装实例 ID

标识某次安装

不可以,可能被复制

设备型号、系统版本

风险画像

不可以

App 版本、完整性证明

判断是否为正版或被篡改客户端

不可以,但很有价值

IP、地区、ASN

异地和代理风险识别

不建议强绑定

Root、越狱、模拟器状态

提高风险评分

不可以

IMEI、MAC、Android ID

历史设备标识

不建议作为核心凭证

IP、设备型号、系统版本都会变化,也可能被伪造。它们适合做风险评分,不适合直接决定 Token 是否有效。

四、推荐落地方案

普通 App 可以采用下面的组合:

  • Access Token 保持短效,例如 5~30 分钟。

  • Refresh Token 绑定设备公钥指纹。

  • 刷新 Token 时必须提供设备签名。

  • 启用 Refresh Token Rotation,每次刷新后旧 Token 立即失效。

  • 检测到旧 Refresh Token 被再次使用时,撤销对应 Token Family。

  • 高风险接口要求重新输入密码、短信验证或 Passkey。

  • 提供“已登录设备”页面,允许用户主动下线设备。

  • Android 配合 Play Integrity,iOS 配合 App Attest,作为辅助可信信号。

标准化方案优先考虑:

  • DPoP:在应用层通过公私钥证明 Token 持有者,适合 OAuth 客户端。

  • mTLS Certificate-Bound Token:通过客户端证书约束 Token,更常见于服务间调用、金融和企业系统。

不要自行发明复杂加密协议。确实需要自定义请求签名时,至少要覆盖请求方法、目标 URI、Token 哈希、时间戳和一次性随机数,并做好密钥轮换与重放检测。

五、设备绑定不能解决什么

设备绑定不是万能方案。如果攻击者已经控制原设备,能够在设备内调用私钥完成签名,服务端看到的请求仍可能合法。

因此它主要防止的是:

  • Token 被复制到其他设备使用

  • 抓包或日志泄漏后的直接重放

  • 数据备份、数据库泄漏导致的会话搬运

它不能替代终端安全、风控、短效 Token、权限控制和异常登录检测。

总结

只绑定 device_id 属于弱绑定,因为设备 ID 只是可以复制的标识。

更可靠的方案是:

设备安全区生成不可导出的私钥,服务端将 Token 绑定到公钥指纹,并要求客户端对请求生成持有证明。

实际项目中,再叠加短效 Access Token、Refresh Token Rotation、完整性校验和异常风控,才能形成完整的设备会话安全方案。

参考资料