条件与它的事实:一次委托的 DENY 站在什么上面
规范解读 · 第 19 篇 · 本文引证来源 · 墙上的更正原文(引文逐字): W3C Agent Protocol CG · post 0081 · Alan Karp · 被更正的案例: post 0067 · 我们的答复(已上墙): post 0082 · 它延伸的中任务规则: 规范解读 · 第 18 篇 · 所应用的租约语义: draft-li-rttp-iqa-addressing-01(全文) · 姊妹双柱: RTTP(rttp://,CRI 27)· IQA(iqa://,CRI 28)
产出第 15 到 18 篇的那场交流,没有停在中任务案例上。同一位对话者——Alan Karp,其一连串提问自第 15 篇起一路驱动着本系列——带着一个更正回来了,而且是有用的那种——重画一条边界,而不是争夺一条。我们在 0067 号帖里的具体案例——信封写着「只为公司内部订机票,截至周五」,解释器说 permitted 而线上应答说 evidence_expired——把「在公司内部」读成了对动作的约束。对方的答复第一句就说,这不是要点:
墙上的更正原文(0081 号帖,中译) · Alan Karp · 墙上原件(原文为英文,引文逐字)
「你的例子没有抓住我的要点。当我说条件是『在公司内部』时,我的意思是它约束的是你应该把权限委托给谁。用一个真实案例的微小变体来说:有一个季度,HP 不得不提前发布它的财务报表,因为一位记者被抄送进了一封带有草稿的邮件。把案例稍作改动,变成委托对草稿的访问权。
我们通常用标签——比如『公司机密』——来代表可能很复杂的政策。(公司雇用的外部会计师算不算在内?)无论你怎么做,如果委托人能告诉受托人(delegatee——算不上一个词,但不会与动词『委托』混淆)这项权限适用哪些政策,那就好了。它是一个『请』,因为受托人可能有正当的理由违反这个请求,例如委托给一个没有凭证的内部程序。
至于你问的要不要 honor 这个请求,我会说:任一条件不满足,即 DENY。」
条件不是它消费的事实
关于外部会计师的那句插话是这封回信里诚实的部分,值得留在视野里:一个人算不算「在公司内部」,可以和标签暗示的一样复杂,公司机密那张标签代表的政策只有政策自己能画完。这条边界不归我们标准化——它是第 15、16 篇已经放在一层之上的那个「请」,而这次更正让它恰好在原地不动。
但条件与它消费的事实是两种商品,这个区分决定整座建筑能否被审计。受托人是谁——以及这位受托人的权威在使用那一刻是否 standing——不是政策问题。它们是验证器返回的字节。在这些事实之上算出的 DENY,第三方可以从钉死的输入重推导,与我们的拒绝理由可审计的方式相同;只靠标签算出的 DENY,是一件穿着判决外衣的意见。条件可以随政策任意复杂;它底下的事实比条件便宜——而事实是事后审计唯一能站的那块地。
互不竞争的三条线
我们的答复(0082 号帖)接受了更正,并提出了双方本来就在汇合的那条分界。委托人的「请」随权限旅行,不标准化,住在一层之上——这次更正自己就把它留在那里。任一条件不满足即 DENY 在调用层执行;受托人违反请求的正当理由——那个没有凭证的内部程序——就在这一层被掂量,因为那种裁量属于调用层,不属于线格式。而线格式的职责是第三条线:让那个执行决策的权威侧输入在使用的时刻可核验,而不只在授予的时刻。
为此,双柱什么都不用挪。草案从未主张政策的位置,所以对委托对象的条件不会从它手里拿走任何东西;五值拒绝集合继续在「请」的下一层回答「是否」;而「请」之所以保住它不标准化的自由,恰恰因为它脚下的地板是确定性的。
授予时,还是每次使用
有一个问题被留在了开放状态,也是我们怀疑双方看法不同的那一个:「在公司内部」是必须在委托成立时成立,还是在之后每一次使用时都成立?如果答案只在授予时,条件就是给某个时刻签的名,它查过什么,审计将来就只见什么。如果答案是每次使用,那么第三十天离职的那位雇员,就径直走进了第 18 篇的中任务案例:租约到期,下一次验证返回 authority_revoked,急停由运行时从第一份应答起就持有的时间戳武装完毕。
部署上的推论还是第 18 篇拧过的那个旋钮,只是对准了新的刻度盘。想让委托条件骑在新鲜事实上的委托人,不会去找线格式要一种新条件——他们缩短窗口。租约长度就是「任何条件——对动作的也好、对委托的也好——可以在其授予时核验最后一次看到的事实上继续跑多久」的政策旋钮。条件可以是他们的;它消费的东西的新鲜度必须来自某处,而那个某处,就是线格式已经在给的那份应答。
这一轮为什么有帮助
这次更正改善了地图,代价只有一句话。它把「政策」拆成了草案从未混过的两个问题——可以做什么,以及权限可以托付给谁——并展示了两者住在同一层、从底下消费同一批事实、继承同一条审计规则:谁都不能靠自己的说法被审计。它还促成了这一轮安静的汇合:DENY 是调用层的执法动作,「请」留在双方都放它的不标准化位置,而线格式继续做政策与标签都做不了的那一件事——用字节陈述谁在 standing、standing 到何时。
一句话:条件是政策,事实是线格式——一次委托可以因条件被拒,但它只能在事实上被审计。