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