ゆるテックノート

SAMLのバインディング方式とは?

SAMLでは、リクエストやレスポンスのやり取りに複数のバインディング(通信方式)が存在します。それぞれの特徴を理解し、用途に応じた使い分けが重要です。

🔗 バインディング方式とは?

SAMLにおける「バインディング方式」とは、SAMLメッセージ(Request/Response)をどのように送受信するかを定義するルールです。主にHTTPを利用して伝達されます。

代表的な方式

  • 📌 HTTP-Redirect:URLのクエリ文字列にメッセージを載せてGETリクエストで送信
  • 📌 HTTP-POST:Base64エンコードされたXMLをフォームのPOSTで送信
  • 📌 HTTP-Artifact:メッセージ本体は後からバックチャネルで取得される方式

🚀 HTTP-Redirect方式

SAMLRequestやLogoutRequestを送るのによく使われる軽量な方式です。URL長制限には注意が必要です。

特徴と注意点

  • ⚠️ メッセージはURLのクエリ文字列(GET)で送信
  • ⚠️ メッセージはDeflate圧縮 → Base64エンコードされる
  • ⚠️ URL長に制限がある(長いSAMLメッセージには不向き)
  • ⚠️ 署名付きメッセージはURLパラメータにも署名情報が追加される
  • ⚠️ URLパラメータの順序が変わると署名検証に失敗することがある

📮 HTTP-POST方式

多くのIdP/SP間でデフォルトとして使われる方式で、大きなメッセージの送信にも対応できます。

特徴と注意点

  • HTMLのformを使ってPOSTで送信される
  • Base64エンコードされたSAMLメッセージが hidden フィールドに格納される
  • サイズ制限が少なく、署名付きメッセージに適している
  • クライアントが自動でリダイレクトしないため、formにJavaScriptの自動送信が必要
  • JavaScriptが無効な環境では動作しない可能性がある

🧩 HTTP-Artifact方式

Artifact方式では、最初に送るのは識別子のみで、メッセージ本体は別途バックチャネル通信で取得されます。

特徴と実装例

  • 🔍 ブラウザからSPに「アーティファクト」と呼ばれるIDだけが送られる
  • 🔍 SPはArtifactResolveというSOAP通信でIdPから本体を取得
  • 🔍 通信路を完全に制御できるためセキュアだが、実装が複雑
  • 🔍 一部の高セキュリティ要求の現場で使われる
  • 🔍 多くのIdPで非推奨または未対応の場合もある

📊 方式の比較と選び方

以下の表は、各バインディング方式の特徴をまとめたものです。

比較表

方式 送信方法 利点 注意点
HTTP-Redirect GET(URLクエリ) 軽量で実装が簡単。SAMLRequestなどに適している。 URL長制限あり。
署名検証が繊細。
パラメータ順に注意。
HTTP-POST POST(HTMLフォーム) サイズ制限が少なく署名付きメッセージに適している。 JavaScriptでの自動送信が必要。
JS無効環境に弱い。
HTTP-Artifact ID → SOAPで本体取得 セキュリティが高く、バックチャネル制御が可能。 実装が複雑で対応IdPが限られる。
SOAPのセットアップが必要。

💡 さらに知っておきたいバインディングの豆知識

セキュリティと選定の実務観点

  • 🛡️ Redirectは署名の失敗が起こりやすく、検証が難しい場合がある
  • 🛡️ POSTは現在主流の安全な選択肢。多くのIdPでデフォルト
  • 🛡️ Artifactは高セキュリティな設計に向くが、対応できるライブラリが少ない
  • 🛡️ RequestはRedirect、ResponseはPOSTが一般的な組み合わせ