SAML認証
SAML 2.0シングルサインオン(SSO)認証を有効にし、外部のSAML Identity Providerを通じてDrupalにログインできるようにします。
samlauth
インストール
composer require 'drupal/samlauth:8.x-3.12'
概要
SAML Authenticationモジュールは、DrupalをSAML 2.0 Identity Provider(IdP)と統合し、Drupalサイトでシングルサインオン(SSO)認証を可能にします。ユーザーはAzure AD、Okta、OneLogin、Google Workspace、SimpleSAMLphp、またはその他のSAML 2.0準拠のIdPなどの外部ID管理システムに対して認証できます。
このモジュールは、OneLogin PHP SAML Toolkitを使用してSAMLプロトコルのService Provider(SP)側を実装します。IdPへのログインリダイレクト、SAMLアサーションの処理、ユーザーアカウントの作成/リンク、属性の同期、ログアウト機能を含む完全な認証フローを処理します。
主な機能には、設定可能なユーザーリンク戦略(メール、名前、またはカスタム属性による)、SAML属性からの自動ユーザーアカウント作成、ローカルDrupalログインのロールベースのアクセス制御、SAMLメッセージの署名と暗号化のための包括的なセキュリティオプションが含まれます。モジュールは、ファイル、設定値、またはKeyモジュールを通じたX.509証明書管理をサポートし、セキュリティを強化します。
Features
- 外部Identity ProviderとのSAML 2.0シングルサインオン(SSO)認証
- SAML属性からの自動ユーザーアカウント作成(名前、メール、カスタムフィールド)
- 一意のID、メールアドレス、またはユーザー名による柔軟なユーザーアカウントリンク
- ローカルDrupalログインのロールベース制限(SAMLユーザーのローカル認証をブロック)
- ファイル、設定、またはKeyモジュールを介したX.509証明書と秘密鍵の管理
- IdP設定用のSPメタデータXML生成
- 設定可能なNameIDフォーマットとポリシー要件
- リクエスト/レスポンスの署名と暗号化オプション
- 複数のIdP証明書のサポート(鍵のローテーション用)
- SPキーローテーション計画のための新しい証明書サポート
- シングルログアウトサービス(SLS)のサポート
- ユーザーリンクと同期フックのカスタムイベント
- ブルートフォース攻撃に対するフラッド制御保護
- SAMLメッセージのデバッグログ(送受信)
- authmapエントリ管理のためのオプションのViews統合
- アカウントリンクのためのExternal Authモジュールとの統合
Use Cases
企業シングルサインオン統合
DrupalサイトをAzure Active Directory、Okta、OneLoginなどの企業Identity Providerに接続します。ユーザーは企業の資格情報で一度認証すれば、別途パスワードなしでDrupalにアクセスできます。SAML属性に基づいた自動ユーザー作成とロール割り当てを設定できます。
教育機関認証
大学シングルサインオンのためにShibboleth/InCommonフェデレーションと統合します。eduPerson属性をDrupalユーザーフィールドにマッピングします。研究コラボレーションポータル用に複数のIdentity Providerをサポートします。
カスタマーポータルアクセス制御
外部パートナーや顧客に、所属組織のIdentity Providerを通じた安全なアクセスを提供します。ユーザーリンクを使用してSAMLログインを事前作成されたDrupalアカウントに接続します。セキュリティのためにローカルログインを使用できるロールを制限します。
政府/医療コンプライアンス
組織が承認したIdentity Providerを使用してセキュリティ要件を満たします。SAMLアサーションとNameIDの暗号化を有効にします。監査証跡のために署名されたリクエスト/レスポンスを確保します。本番環境では厳格な検証を設定します。
マルチIdPテスト環境
本番環境が企業IdPを使用する一方で、DockerベースのSimpleSAMLphp IdPを使用してローカルでSAML統合をテストします。テスト中に再認証を強制するには/saml/reauthを使用します。SAMLメッセージを検査するためにデバッグログを有効にします。
Tips
- セキュリティのために本番環境では常に「厳格な検証」と署名オプションを有効にしてください
- 本番環境での安全な証明書/鍵保存には、外部キープロバイダーを持つKeyモジュールを使用してください
- 初期設定後、メタデータの有効期限を2日(172800秒)に設定し、HTTPキャッシュを有効にしてください
- 手動設定ではなく/saml/metadata URL経由でIdP管理者とメタデータを交換してください
- ブラウザセッションをクリアせずに再認証を強制するには/saml/reauthでテストしてください
- セットアップ中は一時的にデバッグログを有効にし、本番環境では無効にしてください
- セキュリティ向上のため、自動リンクを有効にする代わりに既知のユーザーのauthmapエントリを事前に入力してください
- IdPグループメンバーシップに基づいて自動的にロールを割り当てるにはsamlauth_user_rolesサブモジュールを使用してください
- ユーザーをIdPのパスワード管理ページに誘導するように「パスワード変更URL」を設定してください
- 証明書ローテーション前に設定をバックアップし、「新しい証明書」フィールドを使用してIdPに鍵の変更を準備させてください
Technical Details
Admin Pages 3
/admin/config/people/saml
ユーザーインターフェースオプション、一意のIDソース、ユーザーリンク動作、アカウント作成、ログイン/ログアウトリダイレクトを含むユーザー関連のSAML認証設定を構成します。
/admin/config/people/saml/saml
Service Provider設定、Identity Provider設定、メッセージの構築/検証オプション、デバッグを含むSAMLプロトコル設定を構成します。
/admin/config/people/saml/authmap/{uid}/delete
SAMLログインIDとDrupalユーザーアカウント間のリンクを削除する確認フォーム。
権限 2
Hooks 4
hook_form_user_form_alter
SAMLのみのユーザーのパスワードフィールドを非表示にし、メールをロックするようにユーザー編集フォームを変更します
hook_form_user_login_form_alter
ログインフォームにSAMLログインリンクを追加し、SAMLのみのユーザーを検証します
hook_form_user_pass_alter
SAMLのみのユーザーがパスワードをリセットできないようにパスワードリセットフォームを検証します
hook_user_presave
新しいユーザーアカウントを保存する前にSAML属性を同期します
Troubleshooting 7
これはSAML通信は機能しているが、設定された一意のID属性が見つからなかったことを意味します。デバッグオプションで「受信SAMLメッセージをログ記録」を有効にし、ログイン試行後、「最近のログメッセージ」でSAMLレスポンスXMLを確認してください。属性名を探し、「一意のID属性」設定を適宜更新してください。
これは通常、リバースプロキシの背後で発生します。drupal.org/docs/getting-started/installing-drupal/using-a-load-balancer-or-reverse-proxyに記載されているように、settings.phpでtrusted_host_patternsとreverse_proxy設定を構成してください。
SAMLメッセージ検証設定で「ログアウト署名パラメータを$_SERVER[REQUEST]から取得」を有効にしてください。このオプションはMicrosoft Identity Providerとの署名検証問題を修正します。
フラッドエントリをクリアする管理UIのためにflood_controlモジュールをインストールしてください。または、「flood」データベーステーブルから直接エントリをクリアしてください。フラッド保護は同じIPからの多数のログイン失敗後にトリガーされます。
ユーザーがSAMLでログインすると、「Drupalログインを使用できるロール」にリストされているロールを持っていない限り、ローカルDrupalログインが制限されます。適切なロールを追加するか、drush config:set samlauth.authentication drupal_login_roles '["authenticated"]'を使用してすべてのユーザーを許可してください。
これは一意のIDが変更されたか、真に一意でない場合に発生します。ユーザーがログインを開始した後は、一意のIDソースが変更されないことを確認してください。重複が存在する場合は、手動で削除し、/admin/people/authmap/samlauthビュー経由で誤ったauthmapエントリを削除してください。
IdPがパスキーなどの非パスワード認証を使用しています。SAMLメッセージ構築設定で「認証コンテキストを指定(パスワードとして)」チェックボックスを無効にしてください。
Security Notes 9
- メール/名前属性に基づくユーザーリンクは、ユーザーがIdPでこれらの値を変更できる場合、セキュリティリスクをもたらします - 攻撃者が既存のアカウントを乗っ取る可能性があります
- SAML認証を実装する際は常にDrupalサイトでHTTPSを使用してください
- ファイルベースのストレージを使用する場合、秘密鍵はWebドキュメントルートの外に保存してください
- 「configure saml」権限は信頼性の高い管理者にのみ付与してください
- SAMLメッセージの改ざんを防ぐためにリクエスト/レスポンスの署名を有効にしてください
- 機密性の高い環境ではアサーションの暗号化を有効にすることを検討してください
- どの既存アカウントを自動的にリンクできるかを制限するためにmap_users_rolesを確認してください
- フラッド制御はブルートフォース攻撃から保護しますが、IdPの問題後に正当なユーザーがブロックされる可能性があります
- ローカルログイン制限により、SAML認証されたユーザーがIdPセキュリティポリシーをバイパスすることを防ぎます