OAuth Client & OpenID Connect SSO | OAuth/OIDCログイン
Microsoft Entra ID(Azure AD)、Google、Keycloak、Oktaなど、OAuth 2.0およびOpenID Connect準拠のIDプロバイダーを使用してDrupalのシングルサインオン(SSO)認証を実現します。
miniorange_oauth_client
インストール
composer require 'drupal/miniorange_oauth_client:^5.0'
composer require 'drupal/miniorange_oauth_client:^4.0'
概要
miniOrange OAuth/OIDC Clientモジュールは、DrupalサイトをOAuth 2.0 / OpenID Connectクライアントに変換し、外部IDプロバイダーとのシームレスなシングルサインオン(SSO)を可能にします。ユーザーはMicrosoft Entra ID(Azure AD)、Azure B2C、AWS Cognito、Google、Discord、Keycloak、Okta、Salesforceなど、多数のOAuth/OpenID準拠サーバーの既存の認証情報を使用して認証できます。
このモジュールはOAuth 2.0 Authorization Code Grantフローを実装し、認可コードをアクセストークンと交換してIDプロバイダーのuserinfoエンドポイントからユーザー情報を取得します。OAuthプロバイダーとDrupalユーザープロファイル間でユーザーデータを同期するための属性マッピングをサポートしています。
無料版では1つのOAuthプロバイダーの設定と既存のDrupalユーザーのログインが可能です。PremiumおよびEnterprise版では、ユーザーの自動作成、複数のOAuthプロバイダー、高度なロールマッピング、OpenID Connectサポート、ドメイン制限、ページ制限、ログイン分析などの機能が追加されます。
Features
- OAuth 2.0およびOpenID Connect(OIDC)シングルサインオン認証
- 20以上の人気OAuthプロバイダー(Azure AD、Google、GitHub、Keycloak、Oktaなど)向けの事前設定済みテンプレート
- stateパラメータによるCSRF保護付きAuthorization Code Grantフロー
- 設定可能なOAuthエンドポイント(Authorization、Token、UserInfo)
- OAuthサーバーからのメールアドレスとユーザー名の基本的な属性マッピング
- OAuthセットアップの検証と受信した属性の確認ができるテスト設定機能
- OAuth有効時にDrupalログインフォームに自動追加されるログインリンク
- 柔軟なクライアント認証情報の送信方式(HTTPヘッダーまたはリクエストボディ経由)
- セキュアなコールバックを必要とするプロバイダー向けのHTTPSコールバックURL強制オプション
- バックアップと移行用の設定のJSONファイルエクスポート
- トラブルシューティング用のダウンロード可能なログファイル付きデバッグロギング
- 安全な保存のためのAES-256-CBCを使用したクライアントシークレットの暗号化
- 動的なアプリ名プレースホルダーをサポートするカスタムログインリンクテキスト
Use Cases
Microsoft Entra ID (Azure AD) を使用した企業シングルサインオン
Microsoft 365 や Azure を使用している組織では、従業員が既存の企業 Microsoft 資格情報を使用して Drupal イントラネットや公開ウェブサイトにログインできるようになります。ユーザーは Drupal ログインページの SSO リンクをクリックすると、Microsoft のログインページにリダイレクトされます。認証後、メールアドレスで照合されたユーザーアカウントで自動的に Drupal にログインします。
Google を使用したソーシャルログイン
ウェブサイト訪問者が Google アカウントを使用して登録・ログインできるようにします。新しい資格情報を作成して覚える必要がなくなるため、登録プロセスが簡素化され、コンバージョン率が向上します。モジュールは Google からユーザーのメールアドレスを取得し、Drupal アカウントと照合または作成します。
Keycloak を使用した認証の一元化
Keycloak を ID 管理ソリューションとして運用している組織は、Drupal をクライアントアプリケーションとして統合できます。これにより、すべての企業アプリケーション間でのシングルサインオン、ユーザー管理の一元化、一貫したアクセス制御ポリシーが実現します。Keycloak が認証を処理し、Drupal は受信したトークンを信頼します。
Okta を使用した顧客ポータル
顧客 ID 管理に Okta を使用している SaaS 企業は、顧客が既存の Okta 資格情報を使用して Drupal ベースのナレッジベースやサポートポータルにアクセスできるようにできます。これにより、シームレスな体験が提供され、Okta で定義されたセキュリティ制御が維持されます。
GitHub を使用した開発者コミュニティ
オープンソースプロジェクトや開発者コミュニティでは、コントリビューターが GitHub アカウントを使用してログインできるようにできます。これは、ほとんどのユーザーがすでに GitHub アカウントを持っている Drupal ベースのドキュメントサイトや開発者ポータルに特に適しています。
Discord を使用したゲームコミュニティ
コミュニケーションに Discord を使用しているゲームコミュニティは、Discord 認証を Drupal コミュニティサイトに統合できます。メンバーは Discord の資格情報を使用して、フォーラム、ギャラリー、会員限定コンテンツにアクセスします。
Salesforce を使用した企業 B2B ポータル
CRM に Salesforce を使用している企業は、パートナーや顧客が Salesforce Community の資格情報を使用して Drupal パートナーポータルにログインできるようにできます。これにより、ビジネスシステム全体で統一された ID が維持され、アクセス管理が簡素化されます。
Tips
- OAuth 設定を変更した後は、接続が正しく動作することを確認するために必ず「Perform Test Configuration」を実行してください
- トラブルシューティング時は Sign In Settings でデバッグログ機能を有効にしてください。ログは Reports > Recent log messages に表示されます
- 設定後は Backup 機能を使用して設定をエクスポートし、設定の復元や移行を簡単に行えるようにしてください
- モジュールに表示されるコールバック URL は、OAuth プロバイダーのアプリケーション設定に表示されているとおりに正確に登録する必要があります
- Azure AD の場合、Application (client) ID を Client ID として使用し、Certificates & secrets でクライアントシークレットを作成してください
- Google OAuth を使用する場合は、Google Cloud Console で Google+ API を有効にし、OAuth 同意画面を設定してください
- ログインリンクがすぐに表示されない場合は、設定変更後に Drupal キャッシュをクリアしてください
- モジュールは標準の Drupal ログインフォームにログインリンクを自動的に追加します。テーマの変更は必要ありません
- カスタムログインリンクの配置には、/moLogin を指すアンカータグを含む Block を作成してください
- クライアントシークレットはデータベースで暗号化されています。移行する場合は、データベース値をコピーするのではなく、エクスポート/インポート機能を使用してください
Technical Details
Admin Pages 8
/admin/config/people/miniorange_oauth_client/config_clc
OAuth/OpenID Connectプロバイダー設定を行うメイン設定ページです。IDプロバイダーのエンドポイント、クライアント資格情報、ログイン動作を設定します。
/admin/config/people/miniorange_oauth_client/mapping
OAuthサーバーからの属性をDrupalのユーザーFieldにマッピングする方法を設定します。メールアドレス、ユーザー名、カスタム属性をマッピングします。
/admin/config/people/miniorange_oauth_client/Settings
デバッグ、ユーザー自動作成、ページ制限、ドメイン制限、カスタムリダイレクトURLを設定します。
/admin/config/people/miniorange_oauth_client/LoginReports
シングルサインオンログイン分析とユーザー認証履歴を表示します(Enterprise機能のみ)。
/admin/config/people/miniorange_oauth_client/licensing
Free、Standard、Premium、Enterpriseプランの機能比較と価格、アップグレードオプションを表示します。
/admin/config/people/miniorange_oauth_client/backup
現在のOAuth設定をJSONファイルにエクスポート、または以前エクスポートしたファイルから設定をインポートします。
/admin/config/people/miniorange_oauth_client/requestDemo
Premium/Enterprise版機能の7日間トライアルをリクエストします。
/admin/config/people/miniorange_oauth_client/CustomerSupportClient
技術的なヘルプ、デモのスケジュール、または営業に関するお問い合わせのためにminiOrangeサポートに連絡します。
権限 1
Hooks 2
hook_help
admin/help/miniorange_oauth_client のヘルプページでモジュールのヘルプテキストを提供します
hook_form_user_login_form_alter
OAuth が設定され有効になっている場合、Drupal のユーザーログインフォームを変更して OAuth SSO ログインリンクを追加します
Troubleshooting 8
Configure OAuth タブで「Enable Login with OAuth」がチェックされていることを確認してください。また、OAuth プロバイダーが必要なすべてのエンドポイントとクライアント資格情報で完全に設定されていることを確認してください。
この CSRF 保護エラーは、state パラメータが一致しないことを示しています。ブラウザの Cookie をクリアし、セッション処理が正しく動作していることを確認し、コールバック URL が OAuth プロバイダーで設定されているものと完全に一致していることを確認してください。
メール属性が正しくマッピングされていません。Test Configuration を再度実行し、テスト結果ウィンドウのドロップダウンからメールアドレスを含む正しい属性を選択してください。
無料版では、一致するメールアドレスを持つユーザーが Drupal にすでに存在している必要があります。最初にユーザーアカウントを作成するか、自動ユーザー作成機能のために Standard/Premium/Enterprise にアップグレードしてください。
Token Endpoint URL が正しいことを確認してください。Client ID と Client Secret が OAuth プロバイダーと一致していることを確認してください。「Send Client ID and secret in」設定を Header と Body の間で切り替えてみてください。
PHP cURL 拡張機能がインストールされ、有効になっている必要があります。php-curl を有効にするには、ホスティングプロバイダーまたはサーバー管理者に連絡してください。
Configure OAuth タブで「Enforce HTTPS Callback URL」チェックボックスを有効にしてください。これにより、サイトが HTTP 経由でアクセスされていても、HTTPS コールバック URL が生成されます。
メール属性を選択した後、テスト設定ポップアップで「Done」ボタンをクリックしていることを確認してください。ポップアップが予期せず閉じる場合は、ブラウザのポップアップブロッカーを確認してください。
Security Notes 8
- クライアントシークレットは、データベースに保存される前にサイトの秘密鍵を使用して AES-256-CBC で暗号化されます
- OAuth state パラメータは CSRF 攻撃を防ぐために使用されます。ランダムデータで生成され、コールバック時に検証されます
- セッションベースの state 比較により、コールバックがログインを開始した同じユーザーから発信されていることが保証されます
- セキュアな接続を必要とする OAuth プロバイダー向けに、HTTPS コールバック URL の強制が利用可能です
- メールアドレスは、ユーザー検索前に filter_var() と FILTER_VALIDATE_EMAIL を使用して検証されます
- すべてのユーザー出力は、XSS 攻撃を防ぐために Html::escape() を使用してエスケープされます
- モジュールは、より良いセキュリティ統合のために、生の cURL ではなく Drupal の HTTP クライアントを使用します
- SSO リンクが常に最新の状態で表示されるように、ログインフォームではページキャッシュが無効になっています