外部IDプロバイダーを使用したREST API認証
IDプロバイダーを使用してDrupal REST APIへのアクセスを保護・制限したい場合は、外部IDプロバイダー認証方法を選択してください。
外部IDプロバイダーを使用したDrupal API認証では、Google、Azure AD、Keycloak、Okta、Gitlabなどのサードパーティーから受け取ったトークンを使用して、Drupal REST APIに安全にアクセスします。
この方法では、IDプロバイダーが提供するユーザー情報エンドポイントと、IDプロバイダーのユーザー名属性をモジュールに設定する必要があります。そうすれば、プロバイダーが提供するトークンを使用してすべてのDrupal APIリクエストを認証できます。 Drupal REST API モジュールは、受け取ったユーザー資格情報をDrupalユーザーアカウントと照合します。 このモジュールはDrupal 7、Drupal 8、Drupal 9、Drupal 10、Drupal 11と互換性があります。
セットアップ動画:
前提条件:ダウンロードとインストール:
- Drupal REST & JSON API Authentication モジュールをダウンロードしてインストールします。
- REST UI:このモジュールは、RESTモジュールを設定するためのユーザーインターフェースを提供します。
- DrupalサイトのExtendセクション(/admin/modules)から以下のWebサービスモジュールを有効にします:
- REST UI
- RESTful Web Services
- Serialization

外部アプリケーション/IDプロバイダーを使用したAPI認証のセットアップ手順:
- 理解を深めるため、DrupalのCreate User APIに外部IDプロバイダーベースの認証を追加する例を見ていきます。
- Drupalの /entity/user APIがDrupalでユーザーを作成するために使用されることに注意してください。
APIを有効にして、メソッドと操作を次のように割り当てます:
- 最初のステップは、APIを有効にし、その特定のAPIで許可されるメソッドと操作を割り当てることです。これはREST UIモジュールを使用して行うか、設定を直接変更することで行えます。
- REST UI モジュールを使用してAPIを有効にするには、REST UIモジュールのConfigureボタンをクリックします(下図参照)

- この例では、Userセクションにある/entity/user APIを有効にする必要があります。その前にあるEnableオプションをクリックしてこのAPIを有効にします。

- 目標はDrupalでユーザーを作成することなので、以下の設定を選択します:
- メソッド:POST
- フォーマット:json
- 認証プロバイダー:rest_api_authentication
- rest_api_authentication を選択すると、miniOrange REST API AuthenticationモジュールがAPIを認証できるようになります。Save Configurationボタンをクリックして続行します。

Drupal REST API Authenticationモジュールの設定:
- このステップでは、外部IDプロバイダーをAPI認証方法として設定します。そのために、REST API AuthenticationモジュールのAPI Authenticationタブに移動します (/admin/config/people/rest_api_authentication/auth_settings)
- Enable Authenticationチェックボックスを選択し、Save Settingsをクリックします。
- Save Settingsボタンの下で、External Identity Providerラジオボタンを選択します。
- User Info Endpointテキストフィールドに、IDプロバイダーのユーザー情報エンドポイントを入力します。モジュールが提供されたトークンを使用してユーザーの情報を取得できるようにするためです。
- また、Username Attributeには、外部プロバイダーがユーザー名を送信するIDプロバイダーの属性キー/名前を入力します。

Drupalのユーザーを作成する権限をDrupalロールに付与します:
- 必要であれば、Drupalサイトの権限セクション(/admin/people/permissions)にあるAdminister users権限にDrupalロールを割り当てることで、非管理者のDrupalロールにもDrupalでユーザーを作成する権限を付与できます。

これで完了です!!!
- それでは、認証に外部IDプロバイダーを使用して、API呼び出しを通じてDrupalでユーザーを作成してみましょう。
例:
- Drupalでユーザーを作成するには、IDプロバイダーから受け取ったTokenとともにPOSTリクエストを送信する必要があります。
リクエスト: POST <your_drupal_base_url>/entity/user?_format=json
ヘッダー: Token: <Token_receievd_from_external_identity_provider>
Accept: application/json
Content-Type: application/jsonボディ: {
"name": [
{"value": "<username>"}
],
"mail": [
{"value": "<email>"}
],
"pass":[
{"value": "<password>"}
],
"status":[
{"value": "1"}
]
}CURLリクエスト形式-
curl --location --request POST `<your_drupal_base_url>/entity/user?_format=json' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Token: <Token_receievd_from_external_identity_proider>' \
--data-raw '{
"name": [
{"value": "Username"}
],
"mail": [
{"value": "email"}
],
"pass":[
{"value": "Password"}
],
"status":[
{"value": "1"}
]
}'
- 以下に追加されたPostmanリクエストの画像も参照できます:

- 成功すると、作成したユーザー情報がレスポンスで返されます。(下の画像を参照)

- レスポンスでエラーが発生した場合は、以下の表を参照してエラーの説明と可能な解決策を確認できます。
エラーレスポンス:
| エラー | 説明 |
| INVALID_USER_INFO_ENDPOINT | モジュール設定で誤ったユーザー情報URLを指定した場合に、このエラーが発生します。 |
| INVALID_USERNAME_ATTRIBUTE | モジュール設定で誤ったユーザー名属性を指定した場合、またはユーザー名の取得中にエラーが発生した場合に、このエラーが発生します。 |
| INVALID_TOKEN | 提供したトークンが正しくない場合、またはヘッダーにトークンが存在しない場合に、このエラーが発生します。 |
Drupal Documentationからの記事。