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が一般的な組み合わせ