Capability URLは、URLを知っていること自体によって資源へのアクセス権限を与える。 ログインなしで共有でき、対象と権限を一つの参照として委譲できる一方、そのURLはパスワードと同じ秘密情報になる。
通常のWeb基盤はURLを秘密として扱わない。 URLはブラウザ履歴、サーバーログ、同期サービス、第三者スクリプトに保存され、別サイトへ移動した際のRefererヘッダーから漏れる可能性もある。 推測不能な長い文字列にしても、保存先や送信先からの漏えいは防げない。
そのため、漏れないことだけに依存せず、漏れたURLだけを失効できるようにする。 同じ権限を複数人へ渡すときは一つのURLを共有せず、受取人や委譲ごとに別のURLを発行すれば、侵害された一つだけを無効にできる。 短い有効期限、一回限りの使用、HTTPS、参照元情報の抑制を組み合わせれば、漏えいしたURLを使える範囲も狭められる。
ただし、失効のためにサーバー側で発行済みURLの状態を管理すれば、単なるランダムなURLより実装と運用は複雑になる。 誰が使用したかをURLの所持だけでは識別できないため、利用者ごとの監査や本人性が必要なら、アカウントに基づく認可と組み合わせるほうが適する。
Capability URLは、操作を示すだけのリンクとは異なる。 APIの応答へ動的なリンクを含めることから、そのリンクを秘密の権限として扱う設計までを無条件に導くことはできない。
https://www.w3.org/TR/capability-urls/