logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll
11/04/2025, by Ivan

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と互換性があります。

 Download 

セットアップ動画:

 Drupal REST API Key Authentication Youtube Video

前提条件:ダウンロードとインストール:

  • Drupal REST & JSON API Authentication モジュールをダウンロードしてインストールします。
  • REST UI:このモジュールは、RESTモジュールを設定するためのユーザーインターフェースを提供します。 
  • DrupalサイトのExtendセクション(/admin/modules)から以下のWebサービスモジュールを有効にします:
    • REST UI
    • RESTful Web Services
    • Serialization

    Drupal Rest api

DrupalでAPIキーベースの認証をセットアップする手順:

  • 理解を深めるため、DrupalのCreate User APIにAPIキーベースの認証を追加する例を見ていきます。
  • ご注意ください :Drupalの /entity/user APIは、Drupalでユーザーを作成するために使用されます。

APIを有効にして、メソッドと操作を次のように割り当てます:

  • 最初のステップは、APIを有効にし、その特定のAPIで許可されるメソッドと操作を割り当てることです。これはREST UIモジュールを使用して行うか、設定を直接変更することで行えます。
  • REST UI モジュールを使用してAPIを有効にするには、REST UIモジュールの Configure ボタンをクリックします(下図参照)

    api key

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

    api key

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

    drupal select

DrupalにAPIキーのユーザーフィールドを作成します:

:モジュールの無料版を使用している場合は、このステップを省略できます。

このステップでは、APIキーを使用してAPI呼び出しを認証する方法を設定します。そのために、まずAPIキーを格納するユーザー属性フィールドを作成する必要があります。

  • Drupalのmanage field (/admin/config/people/accounts/fields) タブに移動します。
  • フィールドを追加するには、 Add field ボタンをクリックします。

    manage fields

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

    Add field

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

    Save field

    Drupal API key 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キーを表示できます。

    REST API create key

  • APIキーは後でAPIの認証時に使用するため、手元に保管しておいてください。

Drupalのユーザーを作成する権限をDrupalロールに付与します:

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

    REST API

これで完了です!!!

  • それでは、認証に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リクエストの画像も参照できます: 

    postman

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

    Postman response

  • レスポンスでエラーが発生した場合は、以下の表を参照してエラーの説明と可能な解決策を確認できます。

エラーレスポンス:

エラー 説明
MISSING_AUTHORIZATION_HEADER

APIリクエストでAuthorizationヘッダーを送信しない場合、または何らかの理由でサーバーによって削除された場合にこのエラーが発生します。

例:
{
 "status": "error",
 "error": "MISSING_AUTHORIZATION_HEADER",
 "error_description": "Authorization header not received."
}

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

モジュールが、リクエストで送信したユーザー名に属するアカウントを見つけられない場合にこのエラーが発生します。

例:
{
 "status": "error",
 "error": "USER_DOES_NOT_EXIST",
 "error_description": "The user does not exist."
}

INVALID_API_KEY

API呼び出しで送信したAPIキーが一致しない場合にこのエラーが発生します。

例:
{
 "status": "error",
 "error": "INVALID_API_KEY",
 "error_description": "The API Key sent in the Request seems to be invalid or incorrect using invalid API Key."
}

USER_NAME_MISSING

モジュールがAPI呼び出しでユーザー名を見つけられない場合にこのエラーが発生します。

例:
{
 "status": "error",
 "error": "USER_NAME_MISSING",
 "error_description": "The username is missing from the request"
}

INVALID_AUTHORIZATION_HEADER

モジュールがヘッダーを正しくデコードできない場合、またはヘッダー内でユーザー名とAPIキーを見つけられない場合にこのエラーが発生します。

例:
{
 "status": "error",
 "error": "INVALID_AUTHORIZATION_HEADER",
 "error_description": "The authorization header seems to be invalid"
}

Drupal Documentationからの記事。