# OAuth 2.0 / OIDC 授权码 + PKCE 流程可视化

端到端模拟带 PKCE 的授权码流程：verifier/challenge 生成、授权 URL、令牌交换、ID Token 校验清单与拦截攻击演示。

> 标准页面: https://elysiatools.com/zh/tools/oauth-oidc-authorization-code-pkce-flow-visualizer

- **分类:** Development

- **关键词:** oauth 流程可视化, pkce s256, id token 校验, at_hash 验证, 授权码流程演示, openid connect 模拟

## 概述

严格贴合规范的离线模拟器：RFC 7636 S256 挑战派生、OIDC Core §3.1.3.7 完整校验清单（真实 HS256 令牌与 at_hash）、攻击者通道和带注解的参数矩阵。无任何网络请求；固定的演示时钟保证输出可复现。

## 输入项

- **流程变体** (select)
- **code_verifier（43-128 个 unreserved 字符，留空用 RFC 示例）** (text): leave blank to use the RFC 7636 Appendix B example (43 chars)
- **Issuer URL** (text): https://auth.example.com
- **client_id** (text): spa-demo-client
- **redirect_uri（须与注册值完全一致）** (text): http://127.0.0.1:8080/callback
- **scope（openid 启用 OIDC）** (text): openid profile email
- **client_secret（演示用 HS256 签名密钥）** (text): demo-secret-not-for-production
- **state（留空则用确定性演示值）** (text): opaque CSRF token, echoed back on the callback
- **nonce（留空则用确定性演示值）** (text): binds the ID Token to this authentication session
- **模拟授权码拦截攻击** (checkbox)

## 适用场景

- 在开发 SPA 或移动端应用时，需要验证 PKCE S256 挑战算法与授权 URL 参数构造是否符合 RFC 7636 规范。
- 实现 OpenID Connect 客户端时，需要排查 ID Token 声明（如 iss、aud、azp、nonce、at_hash）校验逻辑及令牌交换步骤。
- 进行团队技术培训或安全审计时，需要直观演示未启用 PKCE 的授权码拦截漏洞及防御原理。

## 工作原理

- 选择流程变体（PKCE S256、plain 或无 PKCE），并输入 client_id、redirect_uri、scope 及可选的 code_verifier 与密钥参数。
- 工具在本地通过 Base64URL(SHA256(code_verifier)) 派生 code_challenge，并生成带 state 与 nonce 的授权请求 URL 与回调报文。
- 模拟向 Token 端点发送授权码与 verifier 交换令牌，生成符合 OIDC Core §3.1.3.7 规范的模拟 HS256 ID Token 并逐项运行校验清单。
- 输出包含交互时序、参数矩阵、攻击通道对比及校验结果的结构化 HTML 可视化报告。

## 使用案例

- 单页应用（SPA）前端接入 OAuth 2.0 PKCE 流程前的协议排查与报文调试。
- 后端或移动端开发人员学习 OpenID Connect 规范及 ID Token 字段签名与 at_hash 校验机制。
- 安全工程师制作 OAuth 2.0 授权码拦截攻击概念验证（PoC）与安全加固演示。

## 常见问题

### 这个模拟器会向真实的认证服务器发起网络请求吗？

不会，所有算法派生、报文构建与 ID Token 校验均在本地纯离线运行，使用确定性时钟保证结果可复现。

### 什么是 code_challenge 的 S256 转换方法？

S256 是先对 code_verifier 进行 SHA-256 哈希计算，再将结果进行 Base64URL 编码（无填充），是 RFC 7636 推荐的模式。

### ID Token 校验清单包含哪些具体项？

包含 OIDC Core §3.1.3.7 要求的 iss、aud、azp、签名、alg、exp、iat、nonce 以及 at_hash 共 9 项验证。

### 开启“模拟授权码拦截攻击”会展示什么？

会展示攻击者截获 code 后在无 PKCE 绑定时成功换取 Token 的漏洞场景，以及 PKCE S256 如何拒绝攻击者请求。

### code_verifier 的字符要求是什么？

必须是由 43 到 128 个未保留字符（A-Z、a-z、0-9、-、.、_、~）组成的字符串；留空时将采用 RFC 7636 附录 B 的标准示例值。

## 相关工具

- [PKCE Code Verifier 与 Challenge 生成器](https://elysiatools.com/zh/tools/pkce-code-verifier-generator): 生成、校验与验证 OAuth2 / OIDC PKCE（RFC 7636）的 code_verifier 与 S256 code_challenge 配对。三种模式：(1) 从密码学安全随机字节（256/384/512/768 位熵）生成全新的 verifier + challenge；(2) 按 RFC 审计你已有的 verifier——长度（43–128）、字符集 \[A-Za-z0-9-._~\] 与 ≥256 位熵；(3) 通过重算 BASE64URL(SHA256(verifier)) 验证 verifier/challenge 配对。可选构建完整的授权请求 URL 与令牌交换体。补足通用的 nonce-generator（仅输出 verifier+challenge 配对）——增加 RFC 合规审计与配对验证。
- [BIP39 助记词生成器](https://elysiatools.com/zh/tools/mnemonic-bip39-generator): 生成或验证 12 到 24 词的 BIP39 助记词，并显示 entropy 与 PBKDF2-HMAC-SHA512 seed 输出
- [哈希算法对比器](https://elysiatools.com/zh/tools/hash-algorithm-comparator): 对同一输入同时用 MD5、SHA-1、SHA-256、SHA-512、BLAKE2b、BLAKE3 哈希并横向对比：输出长度、十六进制/Base64 摘要、安全状态（已破解/现代）以及相对速度基准。适合教学、选择哈希算法或核对校验和。
- [Kakuro / Fillomino / Masyu / Yajilin / Hashiwokakero / Nurikabe / Slitherlink / Star Battle 谜题生成器（含唯一性证明）](https://elysiatools.com/zh/tools/kakuro-fillomino-masyu-yajilin-hashiwokakero-nurikabe-slitherlink-and-star-battle-puzzle-generator-with-uniqueness-prover): 从种子确定性生成 8 个 Nikoli 家族谜题（同一种子必得同一盘）：Kakuro 稠密填数、Fillomino、Masyu 黑白珠、Yajilin 箭头+环、Hashiwokakero 架桥、Nurikabe 岛与海、Slitherlink 回路提示、Star Battle 双星；每种谜题由「先生成解再出题」流程产出线索，并经穷举回溯求解器数解验证——唯一性是证明出来的（最多数到 2 解），预算耗尽则诚实标注 unproven；附谜面与解答双 SVG 与按求解节点数评分的难度。
- [Tailwind 色板同步器](https://elysiatools.com/zh/tools/tailwind-color-palette-sync): 输入一组 HEX,选择命名规则(色阶 50–950 / 单名 / 对象嵌套),自动生成 tailwind.config.ts 的 theme.extend.colors 片段,每个色阶同时给出 WCAG AA/AAA 对比等级,可选暗色模式。
- [TOTP / HOTP 离线动态密码生成器](https://elysiatools.com/zh/tools/totp-hotp-offline-generator): 从 base32 共享密钥生成 RFC 6238 TOTP（基于时间，6/8 位、30/60 秒步长）与 RFC 4226 HOTP（基于计数器）一次性密码，完全离线，支持 HMAC-SHA1/256/512，并导出 otpauth:// URI 以便导入 Google Authenticator / Authy
- [甲状腺激素指数（TSH/FT4/FT3 联动判读）](https://elysiatools.com/zh/tools/thyroid-index): 联动判读 TSH、FT4 与可选 FT3，判断甲状腺轴状态。成人参考范围：TSH 0.4–4.0 mIU/L、FT4 0.8–1.8 ng/dL（≈10–23 pmol/L）、FT3 2.3–4.2 pg/mL（≈3.5–6.5 pmol/L）。TSH 高 + FT4 低 → 原发性甲减（桥本、消融后、缺碘、胺碘酮/锂）；TSH 高 + FT4 正常 → 亚临床甲减；TSH 低 + FT4 高（±FT3 高）→ 原发性甲亢（Graves、毒性结节、甲状腺炎早期、碘/胺碘酮相关）；TSH 低 + FT4 正常 → 亚临床甲亢或外源性激素或早期甲状腺炎，应查 FT3 识别 T3 毒症；TSH 正常/低 + FT4 低 → 中枢性（继发/三发）甲减（垂体/下丘脑病变）；TSH 高 + FT4 高 → TSH 瘤或甲状腺激素抵抗；全部正常 → 甲状腺功能正常（非甲状腺病态综合征可仅 FT3 低）。注意事项：TSH 昼夜节律（22:00–02:00 峰，午后谷）；多巴胺、激素、重病、卡麦角林可抑制 TSH；孕期应使用孕期特异性 TSH 范围；异嗜性抗体可致假性 TSH/FT4 异常；胺碘酮可致 1 型（碘致）与 2 型（破坏性）甲亢。来源 ATA 2014/2016、NACB 2002、Garber 2012、MDCalc。不构成医疗建议。
- [文本哈希生成器](https://elysiatools.com/zh/tools/text-hash-generator): 一次性计算任意文本的 MD5、SHA-1、SHA-256、SHA-512、CRC-32 哈希。同时给出十六进制和 Base64 两种摘要(基于 UTF-8 编码)。

## 示例

- [代码注释示例](https://elysiatools.com/zh/samples/code-comment-samples): 用于测试注释移除的各种注释样式代码示例文件
- [OAuth 2.0/OpenID Connect 示例](https://elysiatools.com/zh/samples/oauth-openid-connect): OAuth 2.0 授权框架和 OpenID Connect 认证协议示例
- [二维码示例](https://elysiatools.com/zh/samples/qrcode-samples): 用于测试二维码读取和生成工具的示例二维码图像
- [OAuth 2.0 示例](https://elysiatools.com/zh/samples/oauth2-samples): OAuth 2.0 实现示例，包括授权流程、客户端配置和安全最佳实践
