認可をプログラム構造で表す研究 調査ノート
Web framework の middleware / guard / policy API を離れ、「resource authorization をプログラム上で何として表現するか」を一次文献中心に整理するハブ。
Authority を「持っているもの」で表す
- Object-Capability は authority を参照の到達可能性で表す — object-capability は authority を unforgeable reference の保持・到達可能性として制約する
- Macaroons / Biscuit は権限を持ち運び、途中で弱められる — Macaroons / Biscuit は rights と制約を cryptographic credential として持ち運び、holder 側で attenuation できる
Authorization の成立根拠を値・証明として扱う
- Proof-Carrying Authorization は認可結果ではなく証明を持ち運ぶ — requester が policy compliance の proof を持ってきて verifier が検証する
- 型システムで「認可ポリシーを守るコード」を検証する研究 — dependent/refinement/affine type で implementation code が authorization policy に従うことを検証する
- AURA と PCML₅ は認可ロジックをプログラム構造へ組み込む — AURA / PCML₅ は principal、policy、proof obligation、protected resource access を programming language の構造へ組み込む
Authorization model を application code から分離する
- Zanzibar / OpenFGA は認可関係をデータとして表す — Zanzibar / OpenFGA は
user × relation × objectを relationship data として表す - Cedar の PARC は resource を認可問い合わせの一級要素にする — Cedar は
principal × action × resource × contextを authorization request の基本形として固定する
普通の Web application へ落とすときの境界
- 「認可済みリソース型」は既存研究の直訳ではなく設計上の合成 —
EditableDocument/Authorized<T>は上記研究の直訳ではなく、複数の考え方を通常の型システムへ落とした engineering synthesis と見る方が正確 - 認可済み値には lifetime と再検証の問題が残る — request-local にしても revocation / freshness / atomicity は別問題として残る
- 認可済みリソースをハンドラ入力にすると前提を構造化できる — Web handler の入力として認可済み resource を渡す具体的な設計
- request-scoped DI をセキュリティコンテキストとして使う — DI/Registry を request-local な evidence の運搬路として使う設計
ここまでの結論
「認可を boolean 以外で表す」という発想自体には豊富な先行研究がある。ただし、それらは一枚岩ではない。
reference / capability
proof / evidence
logical proposition in a type system
relationship data
PARC authorization query
cryptographic credential
はそれぞれ異なる保証を持つ。
特に Authorized<Resource> を object-capability と同一視するのは危険である。下流コードが unrestricted DB/repository を保持して resource を再取得できるなら authority は wrapper に閉じていない。逆に、wrapper を「ある時点で policy check を通った evidence」と割り切るなら、dependent type を持たない言語でも handler/service API 上で authorization precondition を可視化する設計として利用できる。
Web framework 側の比較は Webアプリのリソース認可パターン 調査ノート に分離してある。