关于 auth0-dpop
介绍如何使用 Auth0 DPoP 将访问令牌绑定到客户端持有的密钥对,涵盖 SPA 配置、证明与随机数处理,以及受支持的 Auth0 SDK。
主要功能
- 01说明 DPoP 令牌绑定
- 02配置 Auth0 API 的 DPoP
- 03通过 SDK 启用证明生成
- 04处理随机数轮换错误
- 05提供受支持 SPA 框架示例
适用场景
- 01防止 API 调用中的令牌重放
- 02为 SPA 添加发送方约束令牌
- 03处理服务器签发的 DPoP 随机数
- 04配置支持 DPoP 的 API
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ auth0/ agent-skills --skill auth0-dpop安装后在 Claude Code 中输入/auth0-dpop确认已加载。
附带文件references/examples.mdreferences/integration.md
详细介绍
Auth0 DPoP 指南
将访问令牌绑定到客户端的加密密钥,防止被盗令牌遭到重放。
概述
什么是 DPoP?
DPoP(持有证明)是一种由 RFC 9449 定义的 OAuth 2.0 机制,可通过加密方式 将访问令牌绑定到客户端持有的密钥对。每个 API 请求都包含一个 短时有效的签名 JWT(DPoP 证明),用于证明发送方持有私钥——攻击者仅凭被盗令牌 无法进行重放。
何时使用此技能
- 保护高价值 API 调用,抵御令牌盗窃和重放攻击
- 满足要求使用发送方受限令牌的安全或合规要求
- 任何以较高安全要求调用受保护 Auth0 API 的 SPA 或 Vanilla JS 应用
何时不应使用此技能
- SSR / 服务端环境——DPoP 依赖存储在浏览器中的私钥;无法在服务端安全使用(Next.js、Nuxt 等)
- 不支持 DPoP 的 API——资源服务器必须配置为接受 DPoP 令牌类型;仅支持 Bearer 的 API 会拒绝 DPoP 证明
- 需要共享令牌的流程——DPoP 令牌绑定到单个密钥对,无法转发给其他客户端或由其他客户端重复使用
要求
- 配置了支持 DPoP 的授权服务器的 Auth0 租户
- 启用了 DPoP 令牌类型的 API 资源服务器
- 使用以下 SDK 之一的浏览器 SPA:
@auth0/auth0-vue、@auth0/auth0-react、@auth0/auth0-angular或@auth0/auth0-spa-js - 生产环境使用 HTTPS(Auth0 对 DPoP 的要求)
关键概念
| 概念 | 描述 |
|---|---|
| DPoP 证明 | 随每个请求附带的短时有效签名 JWT,用于证明持有密钥 |
| DPoP 随机数 | 服务器签发的值,必须包含在证明中以防止重放 |
useDpop: true | 用于启用自动生成 DPoP 证明的 SDK 选项 |
createFetcher() | SDK 辅助函数,返回兼容 fetch 的函数并自动处理证明 |
UseDpopNonceError | 服务器在请求过程中轮换随机数时抛出的错误;使用新的随机数重试 |
步骤 1:在 API 上启用 DPoP
通过 Auth0 控制台
- 前往 Applications → APIs
- 选择 SPA 调用的 API
- 在 Settings 选项卡下,确认 API 标识符与
audience一致 - 控制台中无需额外切换设置——当 API 资源服务器配置为接受 DPoP 令牌时, 客户端会为每个请求启用 DPoP
通过 Auth0 CLI
# Inspect current resource server settings
auth0 api get "resource-servers" | jq '.[] | select(.identifier == "https://your-api-identifier")'
# Enable DPoP token dialect on the API
auth0 api patch "resource-servers/{API_ID}" \
--data '{"token_dialect": "access_token_authz"}'
将
{API_ID}替换为上述 GET 调用返回的 ID。
步骤 2:配置应用
所有框架通用的模式
- 在 Auth0 客户端/提供程序配置中,将
useDpop: true与audience一同添加 - 使用
createFetcher(),而不是手动附加令牌——SDK 会为你处理 证明生成、随机数管理和请求头注入 - 在服务器轮换随机数时处理
UseDpopNonceError
环境变量
确保 .env 中包含 API audience:
# Vite
VITE_AUTH0_DOMAIN=your-tenant.auth0.com
VITE_AUTH0_CLIENT_ID=your-client-id
VITE_AUTH0_AUDIENCE=https://your-api-identifier
更多资源
框架示例
所有受支持框架的完整实现示例:
- Vue.js
- React
- Angular
- auth0-spa-js(Vanilla JS)
集成指南
错误处理与故障排查:
UseDpopNonceError——随机数轮换处理- 常见问题
相关技能
auth0-vue- Vue.js Auth0 集成auth0-react- React Auth0 集成auth0-angular- Angular Auth0 集成auth0-spa-js- Vanilla JS / 框架无关的 SPA 集成auth0-mfa- 多因素身份验证
参考资料
评论
支持 Markdown