摘要
- RFC 5397 定义受保护且按请求计算的
DAV:current-user-principal:它返回一个 HTTP(S) 主体资源 URL,或者明确的未认证伪主体。 - 同一主体可以有多种资源表示,同一资源也可以有多个 URL;服务器选出的单一路径只是继续发现的起点。
- 可审计的自动化必须分开保存服务定位、认证、主体选择、资源可达、主页发现、权限计算、操作接受和用户结果。
凭据回答不了“资源在哪里”
认证回答谁向服务器出示了可接受的凭据。它并不天然告诉客户端,服务器内部哪一项 WebDAV 主体资源代表这个用户。RFC 3744 已经定义主体、组、访问控制项和当前用户权限集合,却没有提供 RFC 5397 后来增加的直接入口。
旧办法之一是做 DAV:principal-match。但匹配结果可能同时包含个人主体和该个人所属的所有组。这个集合对关系查询有价值,对配置向导却过于宽泛。选第一项、猜测路径形状或比较显示名称,都会把客户端习惯伪装成协议事实。
RFC 5397 让受控资源返回 DAV:current-user-principal。其值只能是一个 DAV:href 或 DAV:unauthenticated。href 必须采用 HTTP(S),并且必须属于该主体资源声明的主体 URL 或备用 URI。客户端由此获得一条服务器认可的路径,再去查询组成员关系、备用地址和应用主页。
这张回执很重要,但边界清楚。它证明服务器为本次请求选择了哪个入口,不证明该用户拥有目标日历,不证明能够写入,也不证明最终同步已经发生。
一个主体可以有不止一种表示
RFC 5397 明确承认两种多重性:多个 URL 可以指向同一主体资源;一个认证主体也可以对应多个主体资源。若候选不止一个,服务器可以选择其中任意一个,不过应当对同一主体保持一致。
这使不同目录架构能够互操作,也给数据模型提出限制。客户端不能把一次返回的 URL 升格为跨服务、跨时间的永久身份主键。服务迁移、目录重组或入口变化,可能改变表示而不改变人;不同服务中的相同路径,也可能代表完全不同的主体。
可信记录应保留服务权威、请求时间、认证结果、返回 URL、重定向以及随后读取的主体属性。若要合并两种表示,等价关系必须由有权的服务证明,而不是由字符串相似性推断。
“应保持一致”也不是“永不改变”。它要求变化可解释。监控可以把无说明的 URL 变动标为调查项,却不应立刻创建新账户、合并历史或宣布入侵。
当前主体属于请求,不属于文档
该属性由服务器保护并按请求计算,因为答案取决于这次请求的认证状态。COPY 或 MOVE 永远不会把它随资源复制或移动。文档可以换位置,观察文档的当前用户不能被固化成文档元数据。
这条规则在迁移时尤其关键。如果导出程序把当前主体写入资源快照,后来读取者就可能继承旧请求者的身份痕迹。正确做法是在新请求、新认证上下文中重新计算。
缓存并非错误。RFC 6764 建议 CalDAV 和 CardDAV 客户端缓存成功发现的服务细节,包括完整的主体 URL,以便下次复用。但持续的连接失败或认证失败应触发新的 SRV 查找和账户发现。缓存是一份有来源、有刷新条件的性能副本,不是新的身份权威。
因此故障诊断要问:缓存端点是否过期,认证是否失效,主体映射是否改变,主体资源是否可达,还是主页属性和权限出现问题。“账户失败”不足以分配责任。
未认证是一种明确状态
当认证尚未进行或已经失败,RFC 5397 要求返回 DAV:unauthenticated。这不是待客户端补齐的空字段,而是服务器对本次请求身份状态的明确说明。
若界面为了连续性继续展示上次成功的主体 URL,当前活动就可能被归给错误的人。若客户端按用户名拼接一个主体路径,同样是在用命名习惯代替服务器断言。
RFC 6764 进一步要求,服务提供者在响应包含当前主体属性的 PROPFIND 时强制认证,确保返回值对应提出请求的用户。如果服务器不返回该属性,客户端可能需要向用户询问主体路径。缺失意味着发现流程要走另一条路,不意味着可以静默猜测。
找到主体之后仍要计算权限
身份与授权有关,但不是同一事件。当前主体属性提供主体资源入口;RFC 3744 的当前用户权限集合则表示服务器在某个具体资源上为当前用户计算出的权限。
资源坐标不能省略。用户可能读得了自己的主体记录,却不能修改某一日历;可能属于某个组,却没有某本通讯录的写权限;也可能有写权限,但因 ETag 前置条件失败而不能覆盖新版本。
后来的 CalDAV、CardDAV 发现流程让这条短 URL 变得重要。客户端定位服务、验证连接、认证、取得主体、查询主页集合、访问具体集合、提交操作并检查结果。任何一段成功都不能替代下一段。
真正有用的状态不是一个绿色“已连接”,而是一条推进中的回执链:服务已找到;身份已认证;主体已定位;表示变化有解释;主体资源可达;主页已发现;目标权限已计算;操作已接受;效果已观察。
证据需要足够,但不需要复制整个目录
审计不必把完整 ACL 和组成员关系复制到每一份日志。它需要足以区分层次的结构化证据:服务标识、请求关联号、认证类别、主体结果类型、受限的 URL 标识、重定向、后续资源状态、权限结论和应用结果。
身份及成员关系具有敏感性,日志必须最小化、限制访问并设置保留期。分层证据的目的不是扩大采集,而是避免把一项成功误写成整条链成功。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
