このチュートリアルでは、Resource Owner Password Flow を使用して独自の API を呼び出す方法を説明します。このフローの仕組みや、これを使用すべき理由について詳しくは、Resource Owner Password Flowを参照してください。
前提条件
-
Auth0 にアプリケーションを登録する。
- Application Type で Regular Web Apps を選択します。
- Allowed Callback URL に
{https://yourApp/callback}を追加します。このフィールドを未設定のままにすると、エラーメッセージが返されます。 - アプリケーションの Grant Types に Password が含まれていることを確認します。手順については、Grant Types を更新する を参照してください。
- アプリケーションでリフレッシュトークンを使用できるようにするには、アプリケーションの Grant Types に Refresh Token が含まれていることを確認します。手順については、Grant Types を更新する を参照してください。リフレッシュトークンの詳細については、Refresh Tokens を参照してください。
-
Auth0 に API を登録する
- API が以前のトークンの有効期限が切れたときに新しいトークンを取得できるよう、API でリフレッシュトークンを受け取れるようにする場合は、Allow Offline Access を有効にします。
-
接続を設定する
- 接続が username とパスワードでユーザーを認証できることを確認します (たとえば、データベース接続、または AD/LDAP、ADFS、Azure Active Directory の エンタープライズ接続) 。
-
Rules を更新または無効にして、特定の接続にのみ影響するようにします。Password Owner Resource Grant のテスト中に
access_deniedエラーが発生する場合は、アクセス制御の Rule が原因である可能性があります。
手順
- テナントを設定:テナントのデフォルト接続を設定します。
- トークンを取得: 認可コードをトークンに交換します。
- APIを呼び出す: 取得したアクセストークンを使用してAPIを呼び出します。
- トークンを更新: 既存のトークンの有効期限が切れたら、リフレッシュトークンを使用して新しいトークンをリクエストします。
テナントを設定する
- Auth0 Dashboard > Tenant Settings に移動し、下にスクロールして Default Directory 設定を探します。
- 使用する接続の名前を入力します。その接続が、ユーザー名とパスワードによるユーザー認証に対応していることを確認してください。
トークンをリクエストする
POST リクエストを送信します。
トークンURLへのPOSTリクエストの例
パラメーター
レスポンス
access_token、refresh_token、id_token、token_type、expires_in の各値を含むペイロードを伴う HTTP 200 レスポンスが返されます。
Resource Owner Password Flow と標準スコープ
パスワードを提供すると完全なアクセス権が与えられるため、パスワードベースのやり取りではすべてのスコープへのアクセスが許可されます。たとえば、リクエストに APIスコープ を含めない場合、すべての API スコープがアクセストークンに含まれます。同様に、リクエストに
openid スコープのみを含めた場合は、openid の標準 OpenID Connect スコープ がすべて返されます。これらのケースでは、レスポンスに scope パラメーターが含まれ、発行されたスコープの一覧が返されます。IDトークンなしでユーザー情報を取得する
ユーザー情報が必要な場合は、リクエストに
openid スコープを含めてください。API が 署名アルゴリズム として RS256 を使用している場合、アクセストークンには有効なオーディエンスとして /userinfo が含まれます。つまり、そのアクセストークンを使って /userinfo エンドポイント を呼び出し、ユーザーのクレームを取得できます。API を呼び出す
リフレッシュトークン
- オフラインアクセスを許可するように API を設定した
- authorize エンドポイントを通じて認証リクエストを開始する際に、
offline_accessスコープを含めた
grant_type=refresh_token を使用して、Authentication API の /oauth/token エンドポイントに POST リクエストを送信します。
トークンURLへのPOSTの例
パラメーター
レスポンス
access_token、その有効期間 (秒単位の expires_in) 、付与された scope の値、および token_type を含むペイロードとともに、HTTP 200 レスポンスが返されます。
使用例
トークンをカスタマイズする
レルムのサポートを設定する
grant_typeリクエストパラメーターをhttp://auth0.com/oauth/grant-type/password-realmに設定します。realmという追加のリクエストパラメーターを送信し、ユーザーが属するレルムの名前を指定します。たとえば、employeesという名前の社内従業員向けデータベース接続を設定しており、そのユーザーがその接続に属している場合は、realmをemployeesに設定します。
レルムとしての接続
アクティブな認証をサポートする接続であれば、データベース接続、パスワードレス接続、AD/LDAP、ADFS、Azure Active Directory のエンタープライズ接続など、レルムとして設定できます。