コンテンツにスキップ

SAML 2.0

SAML(Security Assertion Markup Language)2.0は、当事者間で認証・認可データを交換するためのXMLベースのフレームワークです。Authrimはエンタープライズシステムとの統合のため、Identity Provider(IdP)とService Provider(SP)の両方の役割をサポートします。

  • エンタープライズSSO: エンタープライズ認証システム(AD FS、Okta、Azure AD)と統合
  • レガシーアプリケーションサポート: SAMLのみをサポートするアプリケーションと接続
  • フェデレーション: 組織間の信頼関係を確立
  • 規制遵守: 標準ベースの認証要件を満たす
機能IdPSP備考
SSO(シングルサインオン)YesYesSP起点とIdP起点
SLO(シングルログアウト)YesYesLogoutRequest/LogoutResponse
HTTP-POSTバインディングYesYes主要バインディング
HTTP-RedirectバインディングYesYesDeflate + Base64エンコーディング
メタデータ生成YesYesXMLメタデータドキュメント
XML署名(RSA-SHA256)YesYes署名と検証
NameIDフォーマットYesYesEmail、Persistent、Transient
属性マッピングYesYesプロバイダーごとに設定可能
セッション統合YesYesSessionStore DO
リプレイ保護YesYesSAMLRequestStore DO
JITプロビジョニング-Yes自動ユーザー作成
メタデータ import/refreshYesYesAdmin preview、import、refresh endpoint
署名 rolloverYesYessigning key の publish/promote/retire
機能理由
アサーション暗号化設計判断:署名のみ
アーティファクトバインディングSOAPバックチャネルの複雑さ
ECPプロファイルモバイル固有;スコープ外
エンドポイントメソッド説明
/saml/idp/metadataGETIdPメタデータドキュメント
/saml/idp/ssoGET/POSTシングルサインオンサービス
/saml/idp/sloGET/POSTシングルログアウトサービス
エンドポイントメソッド説明
/saml/sp/metadataGETSPメタデータドキュメント
/saml/sp/acsPOSTアサーションコンシューマーサービス
/saml/sp/sloGET/POSTシングルログアウトサービス
/saml/sp/initGETSP起点SSO開始
エンドポイントメソッド説明
/api/admin/saml-settingsGET/PUTtenant SAML settings
/api/admin/saml-settings/local-signingPOSTlocal signing key settings
/api/admin/saml-settings/local-signing/dr-bundlePOSTlocal signing の disaster-recovery bundle export
/api/admin/saml-settings/local-signing/dr-bundle/importPOSTlocal signing の disaster-recovery bundle import
/api/admin/saml-providersGET/POSTSAML provider の一覧・作成
/api/admin/saml-providers/:idGET/PUT/DELETEprovider の取得・更新・削除
/api/admin/saml-attribute-presetsGET/POSTattribute preset の一覧・作成
/api/admin/saml-metadata/previewPOSTimport 前の metadata preview
/api/admin/saml-metadata/previews/:previewId/entitiesGETaggregate metadata preview からentity一覧を取得
/api/admin/saml-metadata/previews/:previewId/batch-createPOSTaggregate metadata からbatch provider作成を開始
/api/admin/saml-metadata/batches/:batchIdGETaggregate metadata batch statusを取得
/api/admin/saml-metadata/certificate-previewPOSTfederation trust certificate metadataをpreview
/api/admin/saml-providers/:id/import-metadataPOSTprovider への metadata import
/api/admin/saml-providers/:id/refresh-metadataPOSTremote metadata refresh
/api/admin/saml-providers/:id/signing-rollover/*POSTsigning key の publish/promote/retire
  1. ユーザーがSPの保護されたリソースにアクセス
  2. SPがAuthnRequestと共にIdPにリダイレクト
  3. IdPがユーザーを認証(未ログインの場合)
  4. IdPがアサーション付きSAMLレスポンスを生成
  5. IdPがSPのACS URLにリダイレクト
  6. SPがレスポンスを検証しアクセスを許可
  1. ユーザーがIdPポータルにログイン
  2. ユーザーがSPアプリケーションを選択
  3. IdPがアサーション付きSAMLレスポンスを生成
  4. IdPがSPのACS URLにリダイレクト
  5. SPがレスポンスを検証しアクセスを許可

1. SAMLプロバイダーの登録(Admin API)

Section titled “1. SAMLプロバイダーの登録(Admin API)”
Terminal window
POST /api/admin/saml-providers
Authorization: Bearer <admin_token>
Content-Type: application/json
{
"name": "Corporate SSO",
"type": "sp",
"entity_id": "https://sp.corp.example.com",
"metadata_url": "https://sp.corp.example.com/saml/metadata",
"acs_url": "https://sp.corp.example.com/saml/acs",
"slo_url": "https://sp.corp.example.com/saml/slo",
"name_id_format": "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
"sign_assertions": true,
"sign_authn_requests": true,
"attribute_mappings": [
{ "saml_attribute": "email", "user_claim": "email" },
{ "saml_attribute": "displayName", "user_claim": "name" },
{ "saml_attribute": "groups", "user_claim": "groups" }
]
}

外部SPを設定するには、IdPメタデータを取得:

Terminal window
GET /saml/idp/metadata

以下を含むXMLメタデータを返します:

  • エンティティID
  • SSOエンドポイント(POSTとRedirect)
  • SLOエンドポイント
  • 署名証明書(X.509)

メタデータを使用して外部SPを設定:

  • IdPエンティティID
  • SSO URL
  • SLO URL(オプション)
  • 署名検証用IdP証明書

SP起点フローの場合、以下にリダイレクト:

GET /saml/idp/sso?SAMLRequest=<base64_deflate_encoded>&RelayState=<optional>

またはPOST:

POST /saml/idp/sso
Content-Type: application/x-www-form-urlencoded
SAMLRequest=<base64_encoded>&RelayState=<optional>

Authrimはユーザークレームを SAML属性にマッピング:

SAML属性ユーザークレーム
emailemailuser@example.com
displayNamenameJohn Doe
firstNamegiven_nameJohn
lastNamefamily_nameDoe
groupsgroups[“admin”, “users”]

カスタム属性マッピングはプロバイダーごとに設定できます。

フォーマットURI説明
Emailurn:oasis:names:tc:SAML:1.1:nameid-format:emailAddressメールアドレス
Persistenturn:oasis:names:tc:SAML:2.0:nameid-format:persistent不透明な永続ID
Transienturn:oasis:names:tc:SAML:2.0:nameid-format:transient一時識別子
Unspecifiedurn:oasis:names:tc:SAML:1.1:nameid-format:unspecified任意のフォーマット

すべてのSAMLアサーションはRSA-SHA256で暗号署名されます:

  1. XMLを正規化
  2. SignedInfoを作成
  3. RSA鍵で署名
  4. Signature要素を追加
  1. リクエストID追跡: 各AuthnRequest IDを保存
  2. InResponseTo検証: レスポンスは保存されたリクエストを参照する必要あり
  3. アサーションID追跡: アサーションIDを保存しリプレイを防止
  4. 時間検証: NotBefore/NotOnOrAfter条件を強制
  5. クロックスキュー許容: 60秒の時間差を許容
フィールドタイプ説明
namestring表示名
type”sp” | “idp”プロバイダータイプ
entity_idstringSAMLエンティティID
metadata_urlstringメタデータ取得URL
acs_urlstringアサーションコンシューマーサービスURL
slo_urlstringシングルログアウトURL
name_id_formatstringNameIDフォーマット
sign_assertionsbooleanSAMLアサーションに署名
sign_responsesbooleanSAMLレスポンスに署名
sign_authn_requestsboolean署名付きリクエストを要求
allowed_bindingsarray許可する SSO/SLO binding
attribute_mappingsarrayクレームと属性のマッピング
ステータスコード説明
Success認証成功
Requesterリクエストエラー(無効な形式)
ResponderIdPエラー(内部エラー)
AuthnFailed認証失敗
RequestDeniedポリシーによりリクエスト拒否
  1. SAML Tracerブラウザ拡張機能をインストール
  2. SSOフローを開始
  3. SAMLリクエスト/レスポンスを検査
Terminal window
docker run -p 8080:80 \
-e SIMPLESAMLPHP_SP_ENTITY_ID=https://test-sp.example.com \
cirrusid/simplesamlphp
  • 暗号化: アサーション暗号化はサポートなし(署名のみ)
  • アーティファクトバインディング: 未実装(HTTP-POSTが大部分のユースケースをカバー)
  • SOAPバインディング: サポートなし
  • ECPプロファイル: サポートなし