SAML SSO - サービスプロバイダー
Azure AD、Okta、ADFS、Google Appsなどの外部SAML 2.0アイデンティティプロバイダーを通じてユーザー認証を行うことで、DrupalサイトでSAML 2.0シングルサインオン(SSO)を実現します。
miniorange_saml
インストール
composer require 'drupal/miniorange_saml:^3.1'
概要
miniOrange SAMLサービスプロバイダーモジュールは、DrupalサイトをSAML 2.0サービスプロバイダー(SP)として機能させ、外部のSAML 2.0準拠アイデンティティプロバイダー(IdP)を通じたユーザー認証を可能にします。これにより、ユーザーがDrupalサイト専用の認証情報を別途管理する必要なく、安全なシングルサインオン(SSO)機能を提供できます。
このモジュールは、Microsoft Azure AD、ADFS、Okta、Salesforce、Google Apps(Google Workspace)、Shibboleth、SimpleSAMLphp、OpenAM、Centrify、PingOne、PingFederate、RSA、IBM、Oracle、OneLogin、Bitium、Auth0など、幅広いアイデンティティプロバイダーをサポートしています。DrupalサイトとIdP間の信頼関係を設定するための包括的な構成オプションを提供します。
主なSAML 2.0機能には、メタデータ交換(アップロードとURLベースの両方)、X.509証明書管理、NameIDフォーマット設定、ACS(Assertion Consumer Service)エンドポイント処理が含まれます。モジュールは新規SSOユーザーのアカウントを自動作成し、IdP属性をDrupalユーザーフィールドにマッピングできます。
Features
- Drupal向けSAML 2.0準拠サービスプロバイダー実装
- Azure AD、Okta、ADFS、Google Apps、Salesforce、Shibbolethなど複数のアイデンティティプロバイダーをサポート
- URLまたはXMLファイルアップロードによる自動IdPメタデータ設定
- XML形式でのSPメタデータ生成とダウンロード
- 本番稼働前にSSO設定を検証するテスト設定機能
- デバッグ用のSAMLリクエストとレスポンスの表示
- 初回SSOユーザーの自動アカウント作成
- SSOユーザーにデフォルトのDrupalロールを割り当てるロールマッピング(無料版は基本機能のみ)
- 標準Drupalログインフォームおよびカスタムフォームへのログインリンク統合
- 文字エンコーディングサポート付きX.509証明書管理
- カスタマイズ可能なSP Entity IDとベースURL
- 管理UIから直接プレミアム機能の7日間トライアルをリクエスト可能
Use Cases
Azure ADを使用した企業向けシングルサインオン
Microsoft 365を使用している組織では、従業員が既存のMicrosoft資格情報を使用してDrupalサイトにログインできるようになります。このモジュールはService Providerとして機能し、Azure AD(Entra ID)をIdentity Providerとして接続します。ユーザーがDrupalログインページで「Login using Azure AD」をクリックすると、認証のためにMicrosoftにリダイレクトされます。ログインに成功すると、SAML属性に基づいてユーザーアカウントが作成または更新され、自動的にDrupalにログインします。
Shibbolethを使用した教育機関向けSSO
大学や研究機関では、フェデレーションID管理にShibbolethを使用していることが多くあります。このモジュールにより、Drupalサイトが機関のSSOインフラストラクチャに参加でき、学生や教職員が別途アカウントを作成することなく、機関の資格情報を使用してサイトにアクセスできるようになります。
複数のIdPを使用したマルチテナントSaaSアプリケーション
複数の企業顧客にサービスを提供するDrupalベースのSaaSプラットフォームでは、プレミアムバージョンを使用して各顧客に異なるIdentity Providerを設定できます。ドメインベースのSSOルーティングにより、ユーザーのメールドメインまたはアクセスするサブドメインに基づいて、所属組織のIdPにユーザーを誘導します。
強制認証を使用したイントラネットポータル
社内ポータルでは、強制認証を有効にして、すべてのユーザーに企業のIdP経由でのログインを要求できます。匿名アクセスはブロックされ、ユーザーはどのページにアクセスしても自動的にIdPにリダイレクトされます。これにより、認証された従業員のみが会社のリソースにアクセスできるようになります。
ジャストインタイムプロビジョニングを使用した顧客ポータル
顧客向けポータルでは、顧客が自社のIdentity Provider(顧客のIT部門が設定したOktaやOneLoginなど)を使用してログインできるようにすることができます。このモジュールは初回ログイン時に自動的にDrupalユーザーアカウントを作成し、IdPからのSAML属性に基づいて適切なロールを割り当てます。
SSO設定のテスト
すべてのユーザーに対してSSOを有効にする前に、管理者はTest Configuration機能を使用して統合が正しく動作することを確認できます。これにより、完全なSSOフローを実行するポップアップウィンドウが開き、IdPから受信したすべての属性を含むSAMLレスポンスが表示されます。SAML RequestボタンとSAML Responseボタンは、設定の問題をトラブルシューティングするのに役立ちます。
Tips
- すべてのユーザーに対してSSOを有効にする前に、必ずTest Configurationボタンを使用してSSO設定を確認してください
- Service Provider MetadataタブからSPメタデータXMLファイルをダウンロードし、IdPにインポートすると設定が容易になります
- 特に非標準のIdPからの証明書で証明書検証の問題が発生した場合は、Character Encodingを有効にしてください
- 詳細なデバッグにはSAML RequestボタンとSAML Responseボタンを使用してください。これらは送受信される正確なXMLを表示します
- 同じIdPを複数のDrupalサイトで使用する予定の場合は、一意の識別を確保するためにカスタムSP Entity IDを設定してください
- IdPのX.509証明書のバックアップを保持し、サービス中断を避けるために証明書のローテーションを監視してください
- 本番環境では、属性マッピングやロールプロビジョニングなどの高度な機能を評価するためにプレミアム機能のトライアルをリクエストしてください
- /samllogin URLは、よりクリーンなユーザーエクスペリエンスのためにナビゲーションメニューやログインボタンとして直接使用できます
Technical Details
Admin Pages 8
/admin/config/people/miniorange_saml/idp_setup
Identity Providerに設定する必要があるService Providerメタデータを表示します。このページには、SP Entity ID、ACS URL、Audience URI、ダウンロード可能なXMLメタデータなど、IdP側で信頼関係を設定するために必要なすべての値が表示されます。
/admin/config/people/miniorange_saml/sp_setup
Identity Provider設定を構成します。ここでEntity ID、ログインURL、X.509証明書を含むIdPメタデータを入力します。手動設定と自動メタデータインポートの両方をサポートしています。
/admin/config/people/miniorange_saml/user_provisioning
自動ユーザープロビジョニングと同期機能を設定します。このタブでは、さまざまなIdentity ProviderとのSCIMベースまたはAPIベースのユーザー同期を可能にするユーザープロビジョニングバンドルプランを紹介しています。
/admin/config/people/miniorange_saml/Mapping
Identity ProviderからのSAML属性をDrupalユーザーフィールドとロールにマッピングする方法を設定します。基本的なロールマッピング(無料)と高度な属性/カスタムロールマッピング(プレミアム)が含まれます。
/admin/config/people/miniorange_saml/signon_settings
ユーザー検索方法、リダイレクトURL、自動作成設定、強制認証、ドメインベースの制限を含むサインイン動作を設定します。ほとんどの機能はプレミアムです。
/admin/config/people/miniorange_saml/AdvanceSettings
モジュール設定のインポートとエクスポート、およびユーザープロビジョニング(SCIM)などの関連するminiOrangeモジュールに関するプロモーション情報を表示します。
/admin/config/people/miniorange_saml/Licensing
利用可能なライセンスプランとプレミアム機能を表示します。Standard、Premium、Enterpriseプランの機能と価格を比較できます。
/admin/config/people/miniorange_saml/MiniorageSupport
miniOrangeサポートチームにサポートクエリ、機能リクエスト、またはデモリクエストを送信します。
権限 1
Hooks 3
hook_form_alter
標準のDrupalログインフォーム(user_login_form)、ログインBlock(user_login_block)、およびモジュール設定で構成されたカスタムフォームにSAML SSOログインリンクを追加します。
hook_help
admin/help/miniorange_samlでアクセス可能なモジュールのヘルプドキュメントを提供します。設定手順、セットアップガイドへのリンク、FAQへのリンクが含まれます。
hook_theme
モジュールで使用される3つのTwigテンプレートを登録します:トライアルリクエストフォーム用のmo-saml-request-trial、ライセンスページ用のmo-saml-licensing-new、サポートチケット確認用のmo-saml-send-ticket-info。
Troubleshooting 7
Identity Providerで設定されたAudience URIがSP Entity IDと一致していません。Service Provider Metadataタブで正しいAudience URI値を確認し、IdP設定を更新してください。Audience URIはSP Entity IDと完全に一致する必要があります。
モジュールで設定されたIdP Entity IDが、SAMLレスポンスでIdPが送信する値と一致していません。Test Configurationを使用してエラーメッセージで期待されるEntity IDを確認し、Service Provider Setupの「IdP Entity ID or Issuer」フィールドを更新してください。
モジュールで設定されたX.509証明書が、IdPがレスポンスの署名に使用している証明書と一致していません。IdPから現在の証明書を取得し、X.509 Certificateフィールドを更新してください。IdPが証明書をローテーションする場合は、最新のものを使用していることを確認してください。
Service Provider Setupで「Enable login with SAML」がチェックされていること、およびIdP設定が完了していること(IdP Name、Entity ID、Login URLがすべて設定されていること)を確認してください。変更後はDrupalキャッシュをクリアしてください。
Drupalのユーザーアカウントがブロックされています。Peopleに移動してユーザーのブロックを解除するか、新しいSSOユーザーに影響を与えている可能性のある自動ブロックルールがないか確認してください。
SAMLアサーションで必要な属性をリリースするようにIdentity Providerを設定してください。少なくとも、NameIDまたは設定されたメール/ユーザー名属性が送信されていることを確認してください。Test Configuration機能を使用して、受信している属性を確認できます。
すべての必須フィールドが入力されていることを確認してください:Identity Provider Name、IdP Entity ID or Issuer、およびSAML Login URLは必須です。Login URLは有効なURL形式である必要があります。X.509証明書がBEGIN/END CERTIFICATEマーカーで適切にフォーマットされていることを確認してください。
Security Notes 8
- モジュールは、改ざんを防ぐために設定されたX.509証明書を使用してSAMLレスポンスの署名を検証します
- SAMLアサーションには、リプレイ攻撃を防ぐための時間ベースの有効期間(2分の許容範囲)があります
- Destination URLの検証により、SAMLレスポンスは正しいDrupalサイトに対してのみ受け入れられます
- SSOユーザーのパスワードは自動的に生成され、公開されません。認証はIdPで処理されます
- X.509証明書は、信頼できないソースからではなく、IdP管理者から安全に取得する必要があります
- 転送中のSAML通信を保護するために、DrupalサイトでHTTPSを有効にすることを検討してください
- プレミアム機能にはバックドアログインオプションが含まれています。代替認証パスを提供するため、慎重に使用してください
- モジュールはユーザー資格情報を保存または送信しません。すべての認証はIdentity Providerで行われます