APIキー認証
APIキー認証は、Drupal REST APIを保護する最もシンプルな方法の1つです。すべてのユーザーに対してAPIキーを生成したら、そのキーを使用してDrupal REST APIへのアクセスを保護できます。
これは、各APIリクエストのAuthorizationヘッダーでユーザーのDrupalユーザー名とAPIキーを送信することで実現できます。 Drupal API Authentication モジュールは、ユーザー名と対応するAPIキーに基づいてリクエストを認証します。 このモジュールは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

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

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

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

DrupalにAPIキーのユーザーフィールドを作成します:
注:モジュールの無料版を使用している場合は、このステップを省略できます。
このステップでは、APIキーを使用してAPI呼び出しを認証する方法を設定します。そのために、まずAPIキーを格納するユーザー属性フィールドを作成する必要があります。
- Drupalのmanage field (/admin/config/people/accounts/fields) タブに移動します。
- フィールドを追加するには、 Add field ボタンをクリックします。

- 次に Add a new field ドロップダウンから Text (Plain) オプションを選択し、ラベルのテキストフィールドに API Key と入力します。次に Save and continue ボタンをクリックして設定を保存します。
- ユーザー属性のマシン名が field_api_key であることを確認してください。

- 次に Save field settings をクリックし、その後 Save Settings ボタンをクリックしてフィールドの作成を完了します。


- ユーザープロフィールに追加のAPI Keyテキストフィールドが表示されるようになりました。
APIキーベースの認証のセットアップ:
- このステップではAPIキーを生成します。そのためにREST API AuthenticationモジュールのAPI Authenticationタブに移動してください。 (/admin/config/people/rest_api_authentication/auth_settings)
- Enable Authentication チェックボックスを選択し、 Save Settings をクリックします。
- APIキーベースの認証を有効にするには、 API Key ラジオボタンを選択します。
- 同じ画面で、特定のユーザーのAPIキーを生成したり、全ユーザーのAPIキーを一度に生成したりできます。
- 今回は単一のユーザーのAPIキーのみを生成します。
- Enter username テキストフィールドに、APIキーを生成したいユーザー名を入力し、 Generate API key for this user ボタンをクリックします。
- ユーザープロフィールのAPI Keyフィールドから生成されたAPIキーを表示できます。

- APIキーは後でAPIの認証時に使用するため、手元に保管しておいてください。
Drupalのユーザーを作成する権限をDrupalロールに付与します:
- 必要であれば、非管理者のDrupalロールにもDrupalでユーザーを作成する権限を付与できます。Drupalサイトの権限セクション(/admin/people/permissions)にある Administer users 権限にDrupalロールを割り当てることで実現できます。

これで完了です!!!
- それでは、認証にAPIキーを使用して、API呼び出しを通じてDrupalでユーザーを作成してみましょう。
例:
- Drupalでユーザーを作成するには、ユーザーのユーザー名とminiOrange REST API Authenticationモジュールによって発行されたAPIキーとともにPOSTリクエストを送信する必要があります。ユーザー名とAPIキーの値はbase64エンコード形式にする必要があります。 呼び出しを行うための以下の形式を参照できます。
リクエスト: POST <your_drupal_base_url>/entity/user?_format=json
ヘッダー: Authorization: Basic base64encoded <username:api_key>
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 'Authorization: Basic base64encoded<username:API key>' \
--data-raw '{
"name": [
{"value": "Username"}
],
"mail": [
{"value": "email"}
],
"pass":[
{"value": "Password"}
],
"status":[
{"value": "1"}
]
}'
- 以下に追加されたPostmanリクエストの画像も参照できます:

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

- レスポンスでエラーが発生した場合は、以下の表を参照してエラーの説明と可能な解決策を確認できます。
エラーレスポンス:
| エラー | 説明 |
| MISSING_AUTHORIZATION_HEADER |
APIリクエストでAuthorizationヘッダーを送信しない場合、または何らかの理由でサーバーによって削除された場合にこのエラーが発生します。 例: |
| INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE | Authorizationヘッダーを送信したが、それが有効な形式でない場合にこのエラーが発生します。 例: { "status": "error", "error": "INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE", "error_description": "Authorization header must be the type of Basic Authentication." } |
| USER_DOES_NOT_EXIST |
モジュールが、リクエストで送信したユーザー名に属するアカウントを見つけられない場合にこのエラーが発生します。 例: |
| INVALID_API_KEY |
API呼び出しで送信したAPIキーが一致しない場合にこのエラーが発生します。 例: |
| USER_NAME_MISSING |
モジュールがAPI呼び出しでユーザー名を見つけられない場合にこのエラーが発生します。 例: |
| INVALID_AUTHORIZATION_HEADER |
モジュールがヘッダーを正しくデコードできない場合、またはヘッダー内でユーザー名とAPIキーを見つけられない場合にこのエラーが発生します。 例: |
Drupal Documentationからの記事。