Drupal の Simple OAuth モジュールを使って OIDC (OpenID Connect) サーバーを構築し、別の Drupal サイトをクライアントとして SSO ログインを行う動作確認を行います。
環境
- macOS (Apple Silicon)
- DDEV v1.24.10
- Drupal 11.3.2
- PHP 8.3
構成概要
| 役割 | サイト名 | URL | モジュール |
|---|---|---|---|
| OIDC サーバー (IdP) | drupal-oidc-server | http://drupal-oidc-server.ddev.site:33000 | Simple OAuth |
| OIDC クライアント (RP) | drupal-oidc-client | http://drupal-oidc-client.ddev.site:33001 | OpenID Connect |
備考:見分けやすくするため、IdP は青(#1565c0)、RP は緑(#2e7d32)のテーマカラーを設定しています。
インストールプロファイルについて
本記事では、環境構築を簡単に行うためのインストールプロファイルを使用します。プロファイルを使うことで、モジュールの有効化や設定が自動で行われます。
プロファイルは以下のリポジトリで公開しています:
プロファイルのファイル構成
web/profiles/oidc_server_profile/
├── oidc_server_profile.info.yml
├── oidc_server_profile.install
└── config/
└── install/
├── simple_oauth.settings.yml
└── olivero.settings.yml
web/profiles/oidc_client_profile/
├── oidc_client_profile.info.yml
├── oidc_client_profile.install
└── config/
└── install/
├── openid_connect.settings.yml
├── openid_connect.client.drupal_server.yml
└── olivero.settings.yml
サーバー側の構築
1. DDEV プロジェクトの作成と Drupal のインストール
mkdir drupal-oidc-server
cd drupal-oidc-server
ddev config --project-type=drupal --php-version=8.3 --docroot=web --project-name=drupal-oidc-server
ddev start
ddev composer create drupal/recommended-project:^11
ddev composer require drush/drush 'drupal/simple_oauth:^6.1'
2. プロファイルの配置
drupal-oidc-example リポジトリからプロファイルをコピーします。
git clone https://github.com/tarohida/drupal-oidc-example.git /tmp/drupal-oidc-example
cp -r /tmp/drupal-oidc-example/web/profiles/oidc_server_profile web/profiles/
3. プロファイルを使ってインストール
ddev drush site:install oidc_server_profile --account-name=admin --account-pass=admin -y
プロファイルが自動で以下の設定を行います:
- Simple OAuth モジュールの有効化
- テーマカラーを青(#1565c0)に設定
- デフォルト Consumer(drupal_oidc_client)の作成
- 管理者メールアドレスの設定
4. RSA 鍵ペアの生成
Simple OAuth はトークンの署名に RSA 鍵を使用します。セキュリティのため、鍵ファイルは Web ルート外に配置します。
ddev exec mkdir -p /var/www/oauth_keys
ddev exec openssl genrsa -out /var/www/oauth_keys/private.key 2048
ddev exec openssl rsa -in /var/www/oauth_keys/private.key -pubout -out /var/www/oauth_keys/public.key
ddev exec chmod 600 /var/www/oauth_keys/private.key
ddev exec chmod 600 /var/www/oauth_keys/public.key
5. 設定の確認
管理画面「Configuration > People > Simple OAuth」(/admin/config/people/simple_oauth)で鍵ファイルのパスが設定されていることを確認します。
「Configuration > Web services > Consumers」(/admin/config/services/consumer)で Consumer が作成されていることを確認します。
プロファイルによって作成される Consumer の設定値:
| 項目 | 値 |
|---|---|
| Label | Drupal OIDC Client |
| Client ID | drupal_oidc_client |
| Secret | client_secret_test_123 |
| Is Confidential | チェック |
| Is this consumer 3rd party? | チェック |
| Redirect URI | http://drupal-oidc-client.ddev.site:33001/openid-connect/drupal_server |
| Grant types | Authorization Code, Refresh Token |
| Access token expiration | 3600 |
クライアント側の構築
1. DDEV プロジェクトの作成と Drupal のインストール
mkdir drupal-oidc-client && cd drupal-oidc-client
ddev config --project-type=drupal --php-version=8.3 --docroot=web --project-name=drupal-oidc-client
ddev start
ddev composer create drupal/recommended-project:^11
ddev composer require drush/drush 'drupal/openid_connect:^3@alpha'
現時点では OpenID Connect モジュールは alpha 版のみのため、stability フラグを指定してインストールします。
2. プロファイルの配置
drupal-oidc-example リポジトリからプロファイルをコピーします。
cp -r /tmp/drupal-oidc-example/web/profiles/oidc_client_profile web/profiles/
(サーバー側の構築時にリポジトリをクローン済みの場合)
もしくは、リポジトリを再度クローンする場合:
git clone https://github.com/tarohida/drupal-oidc-example.git /tmp/drupal-oidc-example
cp -r /tmp/drupal-oidc-example/web/profiles/oidc_client_profile web/profiles/
3. プロファイルを使ってインストール
ddev drush site:install oidc_client_profile --account-name=admin --account-pass=admin -y
プロファイルが自動で以下の設定を行います:
- OpenID Connect モジュールの有効化
- テーマカラーを緑(#2e7d32)に設定
- デフォルト OpenID Connect クライアント(Drupal OIDC Server)の作成
- ログインフォームへの OIDC ボタン表示(user_login_display: above)
- 既存ユーザーとの連携を許可(connect_existing_users: true)
- 管理者メールアドレスの設定
4. 設定の確認
「Configuration > People > OpenID Connect」(/admin/config/people/openid-connect)でクライアントが作成されていることを確認します。
プロファイルによって作成される OpenID Connect クライアントの設定値:
| 項目 | 値 |
|---|---|
| Name | Drupal OIDC Server |
| Client ID | drupal_oidc_client |
| Client secret | client_secret_test_123 |
| Authorization endpoint | http://drupal-oidc-server.ddev.site:33000/oauth/authorize |
| Token endpoint | http://drupal-oidc-server.ddev.site:33000/oauth/token |
| UserInfo endpoint | http://drupal-oidc-server.ddev.site:33000/oauth/userinfo |
| Scopes | openid email profile |
動作確認
ログインフロー
- クライアント側のログインページ(
http://drupal-oidc-client.ddev.site:33001/user/login)にアクセスします。ログインフォームの上に「Drupal OIDC Server」ボタンが表示されています。
-
「Drupal OIDC Server」ボタンをクリックします。
-
サーバー側の認可画面にリダイレクトされます。未ログインの場合はまずログインフォームが表示されます。
-
サーバー側で admin / admin でログイン後、認可確認画面が表示されます。
-
「Authorize」をクリックすると、クライアント側にリダイレクトされ、ログインが完了します。
Simple OAuth のエンドポイント一覧
| エンドポイント | パス | 用途 |
|---|---|---|
| Authorization | /oauth/authorize | 認可コード取得 |
| Token | /oauth/token | アクセストークン取得 |
| UserInfo | /oauth/userinfo | ユーザー情報取得(OIDC) |
| JWKS | /oauth/jwks | 公開鍵取得(JWT 検証用) |
トラブルシューティング
"The email address is already taken" エラー
クライアント側で connect_existing_users を有効にするか、テスト用に別のメールアドレスを持つユーザーを作成してください。本記事のプロファイルでは、サーバー側とクライアント側で異なるメールアドレスを設定しているため、このエラーは発生しません。
scopes 関連のエラー
OpenID Connect モジュールの Generic クライアント設定で scopes が未設定だとエラーになります。本記事のプロファイルでは openid email profile を設定済みです。
end_session_endpoint の警告
Generic クライアントでは end_session_endpoint が必須項目として扱われる場合があります。本記事のプロファイルでは空文字列を設定して警告を回避しています。
RSA 鍵が見つからないエラー
サーバー側で RSA 鍵ペアを生成していない場合、トークン発行時にエラーが発生します。「RSA 鍵ペアの生成」の手順を実行してください。
終わりに
Drupal の Simple OAuth モジュールを使って OIDC サーバーを構築し、別の Drupal サイトから SSO ログインできることを確認しました。
インストールプロファイルを使用することで、モジュールの有効化や設定を自動化し、環境構築の手間を大幅に削減できます。
Simple OAuth は League OAuth2 Server をベースにしており、Authorization Code Flow、Client Credentials、Refresh Token などの標準的な OAuth 2.0 / OIDC フローをサポートしています。





