Summary

  • draft-liu-oauth-authorization-evidence-01 第 3.6 节要求 as_signature 只覆盖证据 id 与完整 user_confirmation,后者包含准确展示内容、用户动作和时间戳。
  • 负责说明意图如何被解释为授权操作的 audit_trail 被明确排除。我们的本地构造改变了扩展级别和提案引用,规定的签名输入却完全相同。
  • 完整签名 JWT 的外层签名仍覆盖嵌入对象;不透明令牌取回后,TLS 保护传输通道,但不会把邻接审计字段变成可独立验证的签名陈述。

固定屏幕不等于固定解释

这份修订版尝试解决一个真实问题:代理代表人行动时,后来的人应该能够知道用户究竟看见了什么、如何确认、何时确认。核心证据对象因此包含 id、user_confirmation 和分离式 JWS。确认对象保存准确的展示文本、确认动作以及 NumericDate 时间。

第 3.6 节给出的签名步骤非常具体。实现必须新建一个只含 id 和 user_confirmation 的 JSON 对象,用 RFC 8785 JCS 规范化,然后对所得字节签名。除 id、user_confirmation、as_signature 之外的扩展字段不得加入。因此,审计轨迹不在签名范围内并非推测,而是规范算法的结果。

这个边界让签名能够回答一个有限而重要的问题:授权服务器是否签署了这份确认记录?草案同时说明,它不能独立证明用户确实同意。交互与签名密钥都由授权服务器控制;若需要更强的不可否认性,应增加用户侧签名或独立同意审计。

它也不是执行回执。资源服务器需要把证据编号、确认时间、展示摘要,与执行了什么操作以及成功或失败分开记录。确认、资源决策、发出请求、工具执行和外部效果属于不同事实层。

流动的部分恰好决定参数

第 4 节把 audit_trail 定义为语义可追踪材料,用来分析用户意图如何被解释并转换为授权操作。可选字段包括证据引用、semantic_expansion_level 和 proposal_ref。

none、low、medium、high 四个级别只能描述扩展幅度,不能重放解释。例如,“便宜耳机”被标为 medium,并不能说明为何上限是 50 美元而非 500 美元,也不能说明采用了哪一版目录、政策或上下文。

proposal_ref 是授权服务器分配的不透明 URI,指向政策评估、范围缩减或同意修改之前的原始提案。修订 01 没有规定如何取回它、保存多久、如何授权读取,也没有要求内容哈希。引用仍在,不代表被引用的字节仍可取得且不可变。

这不是漏洞断言。部署可以自行保留不可变提案、签署更大的信封,或把响应绑定到持久记录。这里的结论更窄:这些性质尚未成为这份草案定义的可移植证据合同。

两条解释路径共享同一签名输入

本地复现建立了两份完整证据对象。它们使用相同的 id、展示句子、确认动作和时间;第一份把扩展标为 medium,引用 50 美元版本,第二份标为 high,引用 500 美元版本。完整对象与完整哈希不同,但按第 3.6 节投影后完全一致,SHA-256 都是 aec26fa5351ab57f144fd6b387b297969f73e34ec3ea5a557592a0b2d3a7b512。

这个实验只确认字节范围。它没有验证草案中缩写的 JWS,没有攻破 JWS 或 JCS,没有检查真实产品,也没有证明任何交易发生、任何服务器恶意或任何损失出现。

载体决定哪些完整性能够随证据走远

如果证据嵌入 RFC 9068 签名 JWT 访问令牌,外层令牌签名会保护完整嵌入对象,包括审计轨迹。只要保留并验证完整 JWT,修改轨迹就会破坏外层签名。不能因为内层签名较窄,就声称完整 JWT 中的轨迹可以无痕改变。

不透明令牌的旅程不同。资源服务器通过 RFC 7662 内省或专用端点取得证据。草案此时称 as_signature 为证据记录的唯一完整性保护,并要求 TLS。TLS 保护当下连接与响应;当证据被提取、保存或转发后,它不会扩大分离式 JWS 的输入,也不会成为第三方可验证的审计轨迹签名。

内省本身回答当前授权上下文问题。active 由授权服务器判断,结果可因资源服务器而异,缓存还会用新鲜度换取负载。它不会自动成为解释链的长期收据。

证据与政策不能互相冒充

配套 Rego 政策草案把两类对象并排放置:授权证据说明为何获准,rego_policy 说明代理可以做什么以及资源服务器如何运行时评估。内层确认签名不覆盖这个兄弟政策对象的 URI、入口点或输入。

完整外层 JWT 能绑定组合表示;离开该载体后,不透明令牌体系必须说明两个对象如何被可信取回和留存。否则“已经授权”会把展示、解释、政策、决策、执行和结果压成一个词,并把补齐中间缺口的权力交给后续组件。

给解释过程一份可移植护照

高后果代理操作需要一份解释护照,把证据和确认会话编号、展示内容哈希与语言、原始提案或不可变哈希、规范化操作与约束、语义差异及其生成组件、政策编号与哈希和入口及输入、签发者与受众和主体及代理、资源服务器决策、实际发出请求的哈希、执行回执与独立观察到的结果连接起来。

这是 Daniel Kade 的分析建议,不是修订 01 已有要求。敏感字节不必全部放进令牌,可以留在访问受控的记录中,以哈希绑定。最小初始规范也不是集中一切,而是固定足够的对象,让获权方能够重建从屏幕句子到可执行动作的道路。

Sources and limits

观察截至 2026 年 9 月 30 日 Asia/Shanghai。修订 01 是仍活跃的个人 Internet-Draft,不是 RFC、OAuth 工作组共识或采用证据。本地复现只证明规定的签名投影范围,不证明 JWS/JCS 失效、TLS 传输被篡改、实现存在缺陷、服务器恶意、真实损失或操作完成。草案可能修改、替换或到期。