logo

パレット - カラフルに🎨

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

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

Scroll

アクセストークン/OAuthベース認証のセットアップ

11/04/2025, by Ivan

OAuth(Open Authorization)は、トークンベースの認証・承認プロトコルに関するオープンスタンダードで、シングルサインオン(SSO)を提供するために使用できます。OAuthを使用すると、Facebookなどのサードパーティーサービスが、ユーザーのパスワードを公開することなく、エンドユーザーのアカウントに関する特定の情報を使用できます。OAuthはエンドユーザーに代わって仲介者として機能し、特定のアカウント情報の共有を承認するアクセストークンをサービスに提供します。

このDrupal API認証方法は、OAuth 2.0プロトコルを使用してセキュリティアクセストークンを取得します。このトークンは、DrupalサイトAPIへのアクセスを認証するために使用されます。OAuthメソッドは高度に暗号化された安全なアクセストークンを提供し、Drupal APIがしっかりと保護されることを保証します。これは、DrupalのRESTまたはJSON:APIエンドポイントへの不正アクセスを防ぐ最も安全な方法の1つと考えられています。 ã“のモジュールはDrupal 7、Drupal 8、Drupal 9、Drupal 10、Drupal 11と互換性があります。

 Download  

セットアップ動画:

 Drupal REST API OAuth/Access Token Authentication Youtube Video

OAuth 2.0では、以下の3者の当事者が関与します:

  •  ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€APIを通じてアクセスされるデータを所有しており、アプリケーションがそのデータにアクセスできるようにしたいと考えています。
  •  ã‚¢ãƒ—リケーションは、ユーザーに代わってAPIを通じてデータにアクセスしたいと考えています。
  •  APIエンドポイントは、ユーザーのデータへのアクセスを制御・許可します。

APIは、アプリケーションから有効なアクセストークンを受け取った場合のみアクセスを許可します。アプリケーションがアクセストークンを取得する方法は、使用中のOAuthスキームによって異なります。

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

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

    Enable modules

OAuth/アクセストークンベースのAPI認証を設定する手順:

  • 理解を深めるため、Drupalのユーザー情報取得APIにOAuth/アクセストークンベースの認証を追加する例を見ていきます。
  • ご注意ください ï¼šDrupalのユーザー情報取得APIは、ユーザー情報を取得するために使用されます。

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

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

    REST UI

  • この例では、 Content ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚ã‚‹ /user/{user} APIを有効にしたいと思います。その前にある Enable ã‚ªãƒ—ションを使用してこのAPIを有効にします。

    REST API

  • 目標はユーザー情報を取得することなので、以下の設定を選択します:
    • メソッド: GET
    • フォーマット: json
    • 認証プロバイダー: rest_api_authentication
  • これにより、miniOrange REST API AuthenticationモジュールがAPIを認証できるようになります。続行するには Save Configuration ãƒœã‚¿ãƒ³ã‚’クリックします。

    REST API

OAuth/アクセストークンベースのAPI認証のセットアップ:

  • このステップでは、OAuth/アクセストークンをAPI認証方法として設定します。そのために、REST API AuthenticationモジュールのAPI Authenticationタブに移動してください (/admin/config/people/rest_api_authentication/auth_settings)
    •  Enable Authentication ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’選択し、 Save Settings ãƒœã‚¿ãƒ³ã‚’クリックします。
    • Save Settingsボタンの下で OAuth/Access Token ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã‚’選択します。
    • 次に Generate a new Client ID & Secret ãƒœã‚¿ãƒ³ã‚’クリックします。
  • Client IDとSecretは、後でGet User Info APIの認証時に使用するため、手元に保管しておいてください。

    Generate a new client ID

ユーザー情報を表示する権限をDrupalロールに付与します:

  • 必要であれば、非管理者のDrupalロールにもユーザー情報を表示する権限を付与できます。Drupalサイトの権限セクション (/admin/people/permissions) ã«ã‚ã‚‹ View User Information æ¨©é™ã«Drupalロールを割り当てることで実現できます。

    REST API

これで完了です!!!

それでは、認証にOAuth/アクセストークンを使用して、API呼び出しを通じてユーザー情報を取得してみましょう

例:

  • まず、アクセストークンを取得するためのAPI呼び出しを行う必要があります。次に、これを使用してDrupal APIを認証し、ユーザーの情報を取得します。
  • miniOrange API Authenticationモジュールは、アクセストークンを取得するために使用できる2つのグラントタイプをサポートしています:

パスワードグラント:

  • パスワードグラントでは、REST API Authenticationモジュールによって発行されたClient IDとともに、ユーザーのDrupalユーザー名とパスワードを含むPOSTリクエストを送信することでアクセストークンを取得できます。

    リクエスト: POST <drupal_base_url>/rest_api/access_token                   

    ボディ:

    grant_type  = password

    username   = <drupal_username>

    password   = <drupal_password>

    client_id     = <client_id>

    CURL形式のリクエスト-

    curl --location --request POST '<your_drupal_base_url>/rest_api/access_token' \

     --header 'Accept: application/json' \

     --header 'Content-Type: application/x-www-form-urlencoded' \

    --data-urlencode 'grant_type=password' \

     --data-urlencode 'client_id= <drupal_client_id>' \

     --data-urlencode 'username=<drupal_username >\

    --data-urlencode 'password=<drupal_password>'

  • 以下に追加されたPostmanリクエストの画像も参照できます:

    Postman

クライアント資格情報グラント:

  • クライアント資格情報グラントでは、ユーザーのDrupalユーザー名とともに、API Authenticationモジュールによって発行されたClient IDとClient Secretを含むPOSTリクエストを送信することでアクセストークンを取得できます。

    リクエスト: POST <drupal_base_url>/rest_api/access_token

    ボディ:

    grant_type      = client_credentials

    client_id          = <client_id>

    client_secret   = <client_secret>

    Username       = <drupal_username>

    CURLリクエスト形式-

    curl --location --request POST '<drupal_base_url>/rest_api/access_token' \

    --header 'Accept: application/json' \

    --header 'Content-Type: application/x-www-form-urlencoded' \

    --data-urlencode 'grant_type=client_credentials' \

    --data-urlencode 'client_id=<Client_ID>' \

    --data-urlencode 'username=<drupal_username>' \

    --data-urlencode 'client_secret=<Client_secret>'

  • クライアント資格情報グラントを使用してDrupalからアクセストークンを取得するためのPostmanリクエストの画像も参照できます。

    api response

  • 成功すると、トークンの有効期限とトークンタイプとともにアクセストークンが返されます(下の画像を参照)

REST API

エラーレスポンス:

エラー 説明
INVALID_CREDENTIALS

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

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

INVALID_CLIENT_ID

誤ったクライアントIDを送信した場合にこのエラーが発生します。

例:
{
 "status": "error",
 "error": "INVALID_CLIENT_ID",
 "error_description": "Invalid Client ID."
}

INVALID_CLIENT_SECRET

誤ったクライアントIDを送信した場合にこのエラーが発生します。

例:
{
 "status": "error",
 "error": "INVALID_CLIENT_ID",
 "error_description": "Invalid Client Secret."
}

MISSING_USERNAME

リクエストの送信時にパラメータを送り忘れた場合にこのエラーが発生します。

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

Drupal Documentationからの記事。