概要
SAML(Security Assertion Markup Language)は、XML ベースの認証・認可情報交換標準です。主にエンタープライズ環境で、複数のサービス間でユーザ認証情報を安全に共有する**フェデレーション SSO(シングルサインオン)**を実現します。
仕組みと動作原理
登場人物
| ロール | 略語 | 説明 |
|---|---|---|
| サービスプロバイダ | SP | ユーザがアクセスするサービス(例: Salesforce) |
| IDプロバイダ | IdP | 認証を行い、アサーションを発行するサーバ(例: Active Directory FS) |
| プリンシパル | — | 認証対象のユーザ |
SAML 認証フロー(SP-initiated)
1. ユーザ → SP:サービスにアクセス
2. SP → ユーザ:IdP へリダイレクト(SAMLリクエスト)
3. ユーザ → IdP:認証(ID/パスワード・MFA等)
4. IdP → ユーザ → SP:SAMLレスポンス(アサーション)をPOSTで送信
5. SP → ユーザ:アサーション検証後にセッション確立・アクセス許可
SAMLアサーションの構造
アサーションは3種類の情報を含む XML ドキュメント:
| アサーション種別 | 内容 |
|---|---|
| 認証アサーション | いつ・どのように認証されたか |
| 属性アサーション | ユーザの属性(名前・メール・ロール等) |
| 認可決定アサーション | 特定リソースへのアクセス可否 |
アサーションには IdP のデジタル署名が付与され、SP は IdP の公開鍵で署名を検証します。
バインディング方式
| バインディング | 説明 | 用途 |
|---|---|---|
| HTTP-Redirect | GETパラメータにエンコード(SAMLリクエストに使用) | 認証リクエスト送信 |
| HTTP-POST | フォームのhiddenフィールドに格納してPOST(SAMLレスポンスに使用) | アサーション送信(署名を含むため) |
| HTTP-Artifact | アサーション本体を直接送らず参照IDを渡し、SP-IdP間で直接取得 | セキュリティ強化が必要な場合 |
SAML vs OIDC の比較
| 観点 | SAML | OIDC |
|---|---|---|
| フォーマット | XML | JSON(JWT) |
| 主な用途 | エンタープライズSSO | モバイル・Web API |
| セットアップ | 複雑(XML署名・メタデータ交換) | 比較的シンプル |
| SP開始 / IdP開始 | 両方対応 | SP開始が基本 |
SC試験での頻出ポイント
- SP と IdP の役割の違い:SP はサービス提供者、IdP は認証とアサーション発行を行う
- アサーションへの署名の検証方法:IdP の公開鍵証明書を SP があらかじめ保有し検証
- IdP-initiated SSO vs SP-initiated SSO:どちらが開始するかで認証フローが異なる
- メタデータ交換:SP と IdP が事前に XML メタデータを交換して信頼関係(Trust)を確立
- アサーションリプレイ攻撃への対策:NotBefore・NotOnOrAfter・InResponseTo による有効期限管理
よくある誤問・ひっかけパターン
誤り① 「SAML は認可フレームワークである」→ 誤。SAML は認証情報の交換標準です。認可の委譲が目的の OAuth 2.0 と混同しないこと。
誤り② 「SAMLアサーションのHTTP-POSTバインディングはブラウザ経由で送られない」→ 誤。ブラウザの自動送信フォームを利用してユーザのブラウザ経由でリダイレクトされます。
誤り③ 「SP はユーザのパスワードを検証する」→ 誤。パスワード検証は IdP が行います。SP はアサーションの署名のみ検証します。
関連用語
- OAuth 2.0 と OIDC — モダンな認証認可。SAMLとの比較でよく出題
- 多要素認証(MFA)と FIDO2 — IdP での認証強化手段
- 公開鍵暗号(RSA)とデジタル署名 — アサーション署名の基盤技術
重要キーワード
| 用語 | 説明 |
|---|---|
| SAMLアサーション | IdPがSPに送るユーザの認証・属性情報を含むXML文書 |
| SP(サービスプロバイダ) | ユーザが利用するサービス。アサーションを受け取り検証 |
| IdP(IDプロバイダ) | ユーザを認証しアサーションを発行するサーバ |
| フェデレーション | 異なる組織・システム間で認証情報を信頼し合う連携の仕組み |
| HTTP-POST バインディング | アサーションをフォームPOSTでSPに送る方式。署名を含む大きなデータに適する |
| メタデータ | SPとIdPが事前に交換するエンドポイント・証明書情報のXML文書 |