logo

パレット - カラフルに🎨

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

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

Scroll
11/04/2025, by Ivan

Drupal API Authenticationモジュールは、認証のためにAPIリクエストとともにJWTトークンを送信することで機能します。このモジュールは、二者間のやり取り中にユーザーIDを安全に表現するためのオープンスタンダードであるJSON Web Token(JWT)を使用します。

このステップでは、基本的に、Drupalサイトのユーザー名とパスワードを使用して最初にJWTトークンを取得します。ユーザー名とパスワードが検証されると、Drupal REST API Authenticationモジュールが署名付きのJSON Web Tokenを作成します。次に、APIはそのトークンをクライアントアプリケーションに返します。

JWTトークンを受け取ったら、JWTトークンの有効期限が切れるまで、このトークンを使用してDrupalで操作を実行できます。Drupal REST API Authenticationモジュールは、アプリケーションから有効なJWTを受け取った場合のみアクセスを許可します。

JWTは、HSAとRSAという2つのアルゴリズムを使用して署名・検証できます。

DrupalのAPI認証でJWTトークンを使用する方法を見てみましょう。

 Download 

セットアップ動画:

 Drupal REST API JWT Authentication Youtube Video

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

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

    Enable modules

JWTベースのAPI認証を設定する手順:

  • 理解を深めるため、 /node APIを使用してDrupalで基本ページを作成することにJWTベースの認証を追加する例を見ていきます。

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

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

    Settings for REST UI

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

    Resources

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

    Resource settings

JWTベースのAPI認証のセットアップ:

  • このステップでは、JWTをAPI認証方法として設定します。そのために、REST API Authenticationモジュールの API Authentication タブに移動してください(/admin/config/people/rest_api_authentication/auth_settings

    • Enable Authentication チェックボックスを選択し、Save Settingsをクリックします。
    • Save Settingsボタンの下で JWT ラジオボタンを選択します。
  • 認証に外部で作成したJWTトークンを使用したい場合は、以下のオプションを設定することで実現できます:

    •  Username Attribute テキストフィールドに、ユーザー名を受け取る属性名を入力します。
    • 外部JWTトークンを使用したい場合は、DrupalでそのJWTトークンを検証するためのJWKS URIを指定することもできます。

      JWT authentication

Drupalロールにページを作成する権限を付与します:

  • 必要であれば、非管理者のDrupalロールにも基本ページを作成する権限を付与できます。Drupalサイトの権限セクション(/admin/people/permissions)にある Basic page: Create new content 権限にDrupalロールを割り当てることで実現できます。

    Add permissions

これで完了です!!!

それでは、認証にJWTを使用して、API呼び出しを通じて基本ページを作成してみましょう。

例:

  • まず、JWTを取得するためのAPI呼び出しを行う必要があります。次に、そのトークンを使用してDrupal APIを認証し、基本ページを作成します。

  • ユーザーのDrupalユーザー名とパスワードを含むPOSTリクエストを送信することでJWTを取得できます。ユーザー名とパスワードをbase64エンコード形式で送信する必要があります。以下のリクエスト形式を参考にできます。

    リクエスト: POST <your_drupal_base_url>/rest_api/id_token

    ヘッダー: Authorization: Basic base64encoded <username:password;>
                 Accept:  application/json

    CURLリクエスト形式-

    curl --location --request POST ' <your_drupal_base_url>/rest_api/id_token' \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Basic base64encoded <username:password>'

  • DrupalからJWTを取得するためのPostmanリクエストの画像も参照できます。

リクエスト:

Postman request

  • 成功すると、トークンの有効期限とともにJWTが返されます。(下の画像を参照)

    Postman JWT tokent

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

エラー 説明

INVALID_CREDENTIALS

ユーザー名またはパスワードのいずれかが正しくない場合にこのエラーが発生します。

例:
{
 "status": "error",
 "error": "INVALID_CREDENTIALS",
 "error_description": "Invalid username or password."
}

受け取ったJWTを使用してDrupal REST APIを認証する:

  • JWTを使用して認証を行うには、受け取ったJWTをAuthorizationヘッダーにBearerトークンとして追加するだけです。

    リクエスト: POST <drupal_base_url> /node?_format=json
    ヘッダー: Authorization:  Bearer received_JWT
                 Accept: application/json   
    ボディ:        
     {
      "type":[
          {"target_id":"page"}
          ],
      "title":[
          {"value":"Drupal Rest API Authentication"}
          ],
      "body":[
          {"value":"Page created using the JWT Authentication."}
          ]
    }

    CURLリクエスト形式-

    curl --location --request POST   `<drupal_base_url>/node?_format=json'\
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Bearer <received_JWT>' \
    --data-raw '

    {
      "type":[
          {"target_id":"page"}
          ],
      "title":[
          {"value":"Drupal Rest API Authentication"}
          ],
      "body":[
          {"value":"Page created using the JWT Authentication."}
          ]
    }'
     

JWTベースの認証を使用してページを作成するサンプルリクエスト:

  • 同じ内容のPostmanリクエストも参照できます:

    Postman headers

  • 成功時のレスポンスは以下のようになります:

    Postman response

  • Drupalのコンテンツタブで作成したページを確認できます。

    Drupal page

  • エラーレスポンスと可能な解決策:

エラー 説明
MISSING_AUTHORIZATION_HEADER

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

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

INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE

Authorizationヘッダーを送信したがトークンタイプがBearerでない場合にこのエラーが発生します

例:
{
    "status": "error",
    "error": "INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE",
    "error_description": "Authorization header must be the type of Bearer Token."
}

TOKEN_EXPIRED

Authorizationヘッダーを送信したがアクセストークンの有効期限が切れている場合にこのエラーが発生します。

例:
{
    "status": "error"
    "error": "TOKEN_EXPIRED"
    "message": "Invalid request: Token Expired."   
}

USER_INFORMATION_NOT_FOUND

ユーザー情報の取得中にこのエラーが発生します。

例:
{
    "status": "error"
    "error": "USER_INFORMATION_NOT_FOUND"
    "message": "Could Not Retrieve User Information.",  
}

INVALID_SIGNATURE

トークンの署名が無効な場合にこのエラーが発生します。

例:
{
    "status": "error"
    "error": "INVALID_SIGNATURE"
    "message": "Invalid Token signature.",   
}

Drupal Documentationからの記事。