关于 configuring-oauth2-authorization-flow
面向开发者和安全团队的 OAuth 2.0 授权配置技能,涵盖授权流程选择、令牌管理、范围设计及 OAuth 2.1 安全措施。
主要功能
- 01配置带 PKCE 的授权码流程
- 02配置客户端凭据流程
- 03设备授权授予指南
- 04范围与令牌生命周期设计
- 05OAuth 2.1 安全检查
适用场景
- 01为公共客户端实现登录流程
- 02保护服务间身份验证
- 03审查令牌存储与轮换
- 04应用最小权限范围
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill configuring-oauth2-authorization-flow安装后在 Claude Code 中输入/configuring-oauth2-authorization-flow确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py详细介绍
配置 OAuth 2.0 授权流程
概述
配置安全的 OAuth 2.0 授权流程,包括带 PKCE 的授权码模式、客户端凭证模式和设备授权授予。本技能涵盖流程选择、PKCE 实现、令牌生命周期管理、scope 设计以及与 OAuth 2.1 安全要求的一致性。
适用场景
- 在环境中部署或配置 OAuth 2.0 授权流程能力时
- 建立符合合规要求的安全控制时
- 为该领域构建或改进安全架构时
- 执行需要此实现的安全评估时
前提条件
- 熟悉身份与访问管理概念及相关工具
- 可访问测试或实验环境以安全执行
- 已安装所需依赖的 Python 3.8+
- 任何测试活动均须获得适当授权
目标
- 为公共和机密客户端实现带 PKCE 的授权码流程
- 为机器对机器通信配置客户端凭证流程
- 设计最小权限的 scope 层级
- 实现安全的令牌存储、刷新和撤销
- 应用 OAuth 2.1 最佳实践和 RFC 9700 安全建议
- 验证令牌完整性并防范常见 OAuth 攻击
核心概念
OAuth 2.0 授权类型
- 授权码 + PKCE:推荐用于所有客户端类型(Web、移动端、SPA)。在 OAuth 2.1 中 PKCE 为强制要求。
- 客户端凭证:无需用户上下文的机器对机器认证。
- 设备授权授予(RFC 8628):适用于输入受限设备(智能电视、命令行工具)。
- 刷新令牌:长期有效的令牌,用于在不重新认证的情况下获取新的访问令牌。
PKCE(Proof Key for Code Exchange)
PKCE(RFC 7636)可防止授权码拦截攻击:
- 客户端生成随机
code_verifier(43-128 个字符,非保留 URI 字符) - 客户端计算
code_challenge = BASE64URL(SHA256(code_verifier)) - 授权请求包含
code_challenge和code_challenge_method=S256 - 令牌请求包含原始
code_verifier - 服务端验证
SHA256(code_verifier)与存储的code_challenge匹配
令牌类型
- 访问令牌:短期有效(5-60 分钟),bearer 或 DPoP 绑定
- 刷新令牌:长期有效,单次使用并轮换
- ID 令牌(OIDC):包含用户身份声明的 JWT
工作流
步骤 1:带 PKCE 的授权码流程
- 生成加密随机的 code_verifier(至少 43 个字符)
- 使用 S256 方法计算 code_challenge
- 将用户重定向至授权端点,携带以下参数:
- response_type=code
- client_id、redirect_uri、scope、state
- code_challenge、code_challenge_method=S256
- 用户完成认证并同意授权
- 授权服务器重定向并返回授权码
- 在令牌端点用授权码 + code_verifier 换取令牌
- 验证 state 参数与原始值匹配
步骤 2:Scope 设计
- 定义细粒度 scope:
read:users、write:orders、admin:settings - 遵循最小权限:仅请求所需的最小 scope
- 在资源服务器上实现 scope 验证
- 记录 scope 层级和同意要求
步骤 3:令牌安全
- 安全存储令牌(Web 使用 httpOnly cookie,移动端使用 keychain)
- 实现带轮换的令牌刷新(一次性刷新令牌)
- 设置合理的过期时间:访问令牌 5-15 分钟,刷新令牌 8-24 小时
- 启用 DPoP(Demonstration of Proof-of-Possession)以实现发送方约束令牌
- 实现令牌撤销端点
步骤 4:客户端凭证流程
- 使用 client_id 和 client_secret 注册服务客户端
- 请求令牌:POST /oauth/token,grant_type=client_credentials
- 包含所需权限的 scope
- 安全存储 client_secret(vault、环境变量,而非代码中)
- 实现基于证书的客户端认证以获得更高保障
步骤 5:安全加固
- 对所有授权码流程强制启用 PKCE
- 使用精确的 redirect URI 匹配(不使用通配符)
- 通过 state 参数实现 CSRF 防护
- 启用刷新令牌轮换,并在检测到重用时撤销令牌
- 应用 RFC 9700 安全最佳实践
- 禁用隐式授权和 ROPC(已在 OAuth 2.1 中移除)
安全控制
| 控制项 | NIST 800-53 | 描述 |
|---|---|---|
| 访问控制 | AC-3 | 基于令牌的访问强制执行 |
| 身份验证 | IA-5 | 客户端凭据管理 |
| 会话管理 | SC-23 | 令牌生命周期管理 |
| 审计 | AU-3 | 记录所有令牌签发和撤销 |
| 加密保护 | SC-13 | PKCE 和令牌签名 |
常见陷阱
- 使用隐式授权(已在 OAuth 2.1 中移除)而非授权码 + PKCE
- 将令牌存储在 localStorage(易受 XSS 攻击)而非 httpOnly cookie
- 未验证 state 参数,导致 CSRF 攻击
- 使用通配符 redirect URI,导致开放重定向被利用
- 未实现刷新令牌轮换,导致令牌窃取后长期有效
验证
- 授权码 + PKCE 流程成功完成
- PKCE code_challenge 在令牌端点通过验证
- state 参数可防止 CSRF
- 访问令牌在配置的有效期内过期
- 刷新令牌轮换在每次使用时签发新的刷新令牌
- 令牌撤销会使访问令牌和刷新令牌同时失效
- 客户端凭据流程可用于服务间调用
- 作用域在资源服务器上正确强制执行
评论
支持 Markdown