mcpField
C
configuring-oauth2-authorization-flow

configuring-oauth2-authorization-flow

github.com/mukul975安全35.2k259 次安装8 周前更新
代码仓库

关于 configuring-oauth2-authorization-flow

面向开发者和安全团队的 OAuth 2.0 授权配置技能,涵盖授权流程选择、令牌管理、范围设计及 OAuth 2.1 安全措施。

主要功能

  1. 01配置带 PKCE 的授权码流程
  2. 02配置客户端凭据流程
  3. 03设备授权授予指南
  4. 04范围与令牌生命周期设计
  5. 05OAuth 2.1 安全检查

适用场景

  1. 01为公共客户端实现登录流程
  2. 02保护服务间身份验证
  3. 03审查令牌存储与轮换
  4. 04应用最小权限范围

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill configuring-oauth2-authorization-flow

安装后在 Claude Code 中输入/configuring-oauth2-authorization-flow确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.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 授权类型
  1. 授权码 + PKCE:推荐用于所有客户端类型(Web、移动端、SPA)。在 OAuth 2.1 中 PKCE 为强制要求。
  2. 客户端凭证:无需用户上下文的机器对机器认证。
  3. 设备授权授予(RFC 8628):适用于输入受限设备(智能电视、命令行工具)。
  4. 刷新令牌:长期有效的令牌,用于在不重新认证的情况下获取新的访问令牌。
PKCE(Proof Key for Code Exchange)

PKCE(RFC 7636)可防止授权码拦截攻击:

  1. 客户端生成随机 code_verifier(43-128 个字符,非保留 URI 字符)
  2. 客户端计算 code_challenge = BASE64URL(SHA256(code_verifier))
  3. 授权请求包含 code_challenge 和 code_challenge_method=S256
  4. 令牌请求包含原始 code_verifier
  5. 服务端验证 SHA256(code_verifier) 与存储的 code_challenge 匹配
令牌类型
  • 访问令牌:短期有效(5-60 分钟),bearer 或 DPoP 绑定
  • 刷新令牌:长期有效,单次使用并轮换
  • ID 令牌(OIDC):包含用户身份声明的 JWT

工作流

步骤 1:带 PKCE 的授权码流程
  1. 生成加密随机的 code_verifier(至少 43 个字符)
  2. 使用 S256 方法计算 code_challenge
  3. 将用户重定向至授权端点,携带以下参数:
    • response_type=code
    • client_id、redirect_uri、scope、state
    • code_challenge、code_challenge_method=S256
  4. 用户完成认证并同意授权
  5. 授权服务器重定向并返回授权码
  6. 在令牌端点用授权码 + code_verifier 换取令牌
  7. 验证 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:客户端凭证流程
  1. 使用 client_id 和 client_secret 注册服务客户端
  2. 请求令牌:POST /oauth/token,grant_type=client_credentials
  3. 包含所需权限的 scope
  4. 安全存储 client_secret(vault、环境变量,而非代码中)
  5. 实现基于证书的客户端认证以获得更高保障
步骤 5:安全加固
  • 对所有授权码流程强制启用 PKCE
  • 使用精确的 redirect URI 匹配(不使用通配符)
  • 通过 state 参数实现 CSRF 防护
  • 启用刷新令牌轮换,并在检测到重用时撤销令牌
  • 应用 RFC 9700 安全最佳实践
  • 禁用隐式授权和 ROPC(已在 OAuth 2.1 中移除)

安全控制

控制项NIST 800-53描述
访问控制AC-3基于令牌的访问强制执行
身份验证IA-5客户端凭据管理
会话管理SC-23令牌生命周期管理
审计AU-3记录所有令牌签发和撤销
加密保护SC-13PKCE 和令牌签名

常见陷阱

  • 使用隐式授权(已在 OAuth 2.1 中移除)而非授权码 + PKCE
  • 将令牌存储在 localStorage(易受 XSS 攻击)而非 httpOnly cookie
  • 未验证 state 参数,导致 CSRF 攻击
  • 使用通配符 redirect URI,导致开放重定向被利用
  • 未实现刷新令牌轮换,导致令牌窃取后长期有效

验证

  • 授权码 + PKCE 流程成功完成
  • PKCE code_challenge 在令牌端点通过验证
  • state 参数可防止 CSRF
  • 访问令牌在配置的有效期内过期
  • 刷新令牌轮换在每次使用时签发新的刷新令牌
  • 令牌撤销会使访问令牌和刷新令牌同时失效
  • 客户端凭据流程可用于服务间调用
  • 作用域在资源服务器上正确强制执行

评论

支持 Markdown