SAML拡張ガイド
このページでは、SAMLの実装をさらに深掘りするトピックとして、シングルログアウト(SLO)やEncrypted Assertionなどの高度な技術について解説します。
🔁 シングルログアウト(SAML SLO)
SAML SLOは、IdPやSPのどちらかを起点にして、すべてのセッションを一括で終了させる仕組みです。
SLOの基本フロー
- ➡️ ユーザーがSPまたはIdPで「ログアウト」を実行
- ➡️ SAML LogoutRequest が相手に送られる
- ➡️ 相手が LogoutResponse を返却し、セッション終了が確認される
- ➡️ 複数のSPが存在する場合、連鎖的にLogoutRequestが送信される
実装上の注意点
- ⚠️ ブラウザによるセッションCookieの削除だけでは不十分な場合がある
- ⚠️ IdPとSPのどちらがログアウトを制御するか事前に設計が必要
- ⚠️ 複数SPとの同時SLOは一部のIdPでは非対応
🔐 Encrypted Assertion(暗号化アサーション)
SAMLでは、Assertion全体を暗号化して送信することで、ネットワーク上での属性情報漏洩を防ぐことができます。
暗号化のメリット
- ✅ IdP→SP間の通信経路で属性情報の秘匿性を保てる
- ✅ 外部からのリプレイ攻撃や盗聴対策になる
- ✅ 企業間連携などでプライバシー保護が求められる場合に有効
復号に必要な情報
- 🔑 SP側の秘密鍵(private key)
- 🔑 IdPがSPの公開鍵を使って暗号化を行う必要がある
- 🔑 SPライブラリがEncryptedAssertionに対応しているか確認
📄 メタデータ構造の詳細
SAMLでは、IdPやSPの情報を記述したXML形式のメタデータがやり取りされます。
主な要素
- 📘 EntityDescriptor:IdPまたはSPを表す最上位タグ
- 📘 KeyDescriptor:署名や暗号化に使う証明書情報を記述
- 📘 SingleSignOnService:ログイン処理を受け付けるエンドポイント
- 📘 AssertionConsumerService:SPがレスポンスを受け取るエンドポイント
注意点
- 🔍 証明書の期限切れがあると通信が拒否されることがある
- 🔍 エンドポイントURLのタイポやプロトコル違いに注意
- 🔍 独自にメタデータを生成する場合はスキーマに準拠すること