Summary
draft-richer-oauth-oob-authcode-00面向无法承接浏览器回调的客户端,用客户端保存的state把授权码变成一个可复制值;它仍是个人 Internet-Draft,不是 OAuth 工作组成果或 RFC。- helper page 用 HKDF、XOR 和三字节 checksum 生成
CC,客户端凭原state还原code,之后仍须向 token endpoint 兑换。 - checksum 通过只说明本次还原在格式上自洽,不证明传输保密、issuer 正确、PKCE 成功、token 已签发、资源有权访问或业务动作已经发生。
只把人工交接缩成一步
命令行客户端可以让用户在浏览器中打开 authorization URL,却未必能在远程主机上提供浏览器可达的 callback。修订 00 不另造 grant:它把静态 helper page 注册为 redirect_uri,让 authorization server 照常回送 code 和 state,再由用户把 helper 显示的单一字符串贴回等待中的客户端。
helper 没有后端状态,不与客户端预共享秘密,也不向 token endpoint 发请求。authorization server 无须理解这套编码。它解决的是两串值在人手中被混淆或损坏的问题。
因此,页面显示成功、用户复制成功、客户端收到输入,是三张传递回执。它们都不是 token 回执,更不是资源操作结果。
三个字节回答不了“谁”
helper 把授权码编码为 C,以 UTF-8 state 为输入、空 salt 和共同 INFO 运行 HKDF,得到同长度的 KS,再计算 E = C XOR KS。SHA256(C) 的前三个字节成为 T。T 与 E 分别做无 padding 的 base64url 后拼接成 CC。
客户端仍保存原 state。它重建 KS、取回 C、重新计算 T;不一致就失败,长度不超过四个 checksum 字符的输入必须丢弃。随后,客户端才把还原出的 code 送往 token endpoint。
T 不是 authorization server 持有密钥生成的 MAC。任何人都能用公开静态页面处理任意 code 和 state。三字节相等只说明“按这个 state 还原出的字节与短校验一致”,不能证明是谁生成、来自哪个浏览器会话、是否仍在有效期内。
加密运算发生在暴露之后
浏览器请求 helper 时,code 和 state 已经位于 GET 参数中。helper 的源站、CDN、镜像与缓存都可能看到它们。HKDF 和 XOR 随后才在页面里运行。草案明确说,这些运算不会为基础 authorization code grant 增加安全保护,也不会让 code 变成秘密。
如果 code 与 state 一并被盗,CC 无法补救。若客户端没有保存 state,它也无法还原。JavaScript 不可用时,建议 fallback 是复制完整 helper URL;那条路径直接携带两项参数,根本不使用 HKDF。
构造还会丢弃 iss 等其他回调参数。只有在客户端确信 AS 会返回 issuer 时,才可能把它纳入 INFO。于是 issuer 校验必须保留为单独证据,不能被一次粘贴成功遮住。
OAuth 的后半程没有消失
RFC 6749 的 code 绑定、redirect 检查、有效期和 token 兑换仍然存在。使用 PKCE 时,客户端仍需提交与 challenge 对应的 verifier。客户端认证、一次性使用与 RFC 9700 的安全建议,也不会自动进入三字节 checksum。
RFC 8628 的 device authorization grant 是另一种架构:AS 提供 device code,客户端轮询。新草案刻意避免服务器增加 grant 支持。少一些 round trip 可以是工程收益,却不是两种流程安全和恢复能力相同的证据。
Lu Heng 的 Minimum Initial Specification 要求把共同承诺压窄:这里只承诺降低人工抄录错误。Running-Code Primacy 则继续检查客户端到底还原了什么、token endpoint 接受了什么、resource server 最终执行了什么。一个输入框不能把这些现实层合并。
来源与限制
- https://datatracker.ietf.org/doc/draft-richer-oauth-oob-authcode/
- https://datatracker.ietf.org/doc/draft-richer-oauth-oob-authcode/history/
- https://heng.lu/minimum-initial-specification-localized-future-decision-voluntary-adoption-internet-coordination-system/
- https://heng.lu/on-reality-layers-symbolic-power-and-why-clarity-feels-so-hostile/
- https://heng.lu/running-code-primary-the-patch-needed-to-preserve-the-internet-original-design/
- https://www.ietf.org/archive/id/draft-richer-oauth-oob-authcode-00.html
- https://www.rfc-editor.org/rfc/rfc4648.html
- https://www.rfc-editor.org/rfc/rfc5869.html
- https://www.rfc-editor.org/rfc/rfc6234.html
- https://www.rfc-editor.org/rfc/rfc6749.html
- https://www.rfc-editor.org/rfc/rfc7636.html
- https://www.rfc-editor.org/rfc/rfc8252.html
- https://www.rfc-editor.org/rfc/rfc8628.html
- https://www.rfc-editor.org/rfc/rfc9700.html
这些来源不证明 OAuth 工作组采纳、IETF 共识、RFC、实现、互操作、部署、登录完成、token 签发、攻击、缓解成效或资源结果。既有 RFC 10027 文章继续拥有“攻击者控制发起设备”的跨设备上下文问题;本文只分析修订 00 在诚实流程里产生的还原回执。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance

