ゆるテックノート

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のタイポやプロトコル違いに注意
  • 🔍 独自にメタデータを生成する場合はスキーマに準拠すること