Skip to main content
このチュートリアルでは、Resource Owner Password Flow を使用して独自の API を呼び出す方法を説明します。このフローの仕組みや、これを使用すべき理由については、Resource Owner Password Flow を参照してください。
Resource Owner Password (ROP) フローではアプリケーションがユーザーのパスワードを扱うため、サードパーティのクライアントでは使用しないでください。
Auth0 では、Authentication API を使って、アプリに Password Flow (Resource Owner Password Grant または ROPG とも呼ばれます) を簡単に実装できます。以降では、API を直接呼び出す方法を説明します。

前提条件

このチュートリアルを始める前に:
  • Auth0 にアプリケーションを登録する.
    • アプリケーションの種類 として Regular Web Apps を選択します。
    • Allowed Callback URL{https://yourApp/callback} を追加します。このフィールドは空欄にできません。空欄のままだとエラーメッセージが返されます。
    • アプリケーションの グラントタイプパスワード が含まれていることを確認します。設定方法については、グラントタイプを更新する を参照してください。
    • アプリケーションでリフレッシュトークンを使用できるようにするには、アプリケーションの グラントタイプリフレッシュトークン が含まれていることを確認します。設定方法については、グラントタイプを更新する を参照してください。リフレッシュトークンの詳細については、リフレッシュトークン を参照してください。
  • Auth0 に API を登録する
    • 以前のトークンの有効期限が切れたときに API が新しいトークンを取得できるよう、API でリフレッシュトークンを受け取れるようにする場合は、オフラインアクセスの許可 を有効にします。
  • 接続を設定する
  • 特定の接続にのみ影響するように、ルール を更新または無効化します。Password Owner Resource Grant のテスト中に access_denied エラーが発生した場合は、アクセス制御ルールが原因の可能性があります。

手順

  1. テナントを設定する:テナントのデフォルト接続を設定します。
  2. トークンをリクエストする: 認可コードをトークンに交換します。
  3. API を呼び出す: 取得したアクセストークンを使用して API を呼び出します。
  4. リフレッシュトークン: 既存のトークンの有効期限が切れたら、リフレッシュトークンを使用して新しいトークンをリクエストします。
任意: サンプルのユースケースを確認する 任意: レルムのサポートを設定する 任意: MFA を設定する 任意: 攻撃対策を設定する

テナントを設定する

Resource Owner Password Flow では、ユーザー名とパスワードでユーザーを認証できる接続を使用するため、テナントのデフォルト接続を設定する必要があります。
  1. Auth0 Dashboard > Tenant Settings に移動し、下にスクロールして Default Directory 設定を探します。
  2. 使用する接続の名前を入力します。その接続が、ユーザー名とパスワードでユーザーを認証できることを確認してください。

トークンをリクエストする

API を呼び出すには、まず通常はインタラクティブなフォームを通じてユーザーの資格情報を取得する必要があります。アプリケーションが資格情報を取得したら、それをトークンに交換する必要があります。そのためには、トークン URLPOST する必要があります。

トークン URL に POST する例

パラメータ

レスポンス

問題なく処理されると、access_tokenrefresh_tokenid_tokentoken_typeexpires_in の各値を含むペイロードを持つ HTTP 200 レスポンスが返されます:
保存する前にトークンを検証してください。方法については、ID トークンを検証するおよびアクセストークンを検証するを参照してください。
リフレッシュトークンを使うと、ユーザーは実質的に無期限に認証済みの状態を維持できるため、安全に保管する必要があります。

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スコープを含めた
新しいアクセストークンを取得するには、を使用できます。通常、ユーザーが新しいアクセストークンを必要とするのは、前のトークンの有効期限が切れた後か、新しいリソースに初めてアクセスするときだけです。APIを呼び出すたびに新しいアクセストークンを取得するためにエンドポイントを毎回呼び出すのは望ましくありません。さらに、Auth0ではrate limitsが設けられており、同じIPから同じトークンを使用してそのエンドポイントに送信できるリクエスト数は制限されます。 トークンを更新するには、grant_type=refresh_tokenを使用して、Authentication APIの/oauth/tokenエンドポイントにPOSTリクエストを送信します。

トークン URL に POST する例

パラメーター

レスポンス

正常に処理されると、新しい access_token、その有効期間 (秒単位の expires_in) 、付与された scope の値、token_type を含むペイロードとともに、HTTP 200 レスポンスが返されます。
保存する前に、トークンを検証してください。詳しくは、ID トークンを検証するアクセストークンを検証する を参照してください。

使用例

トークンをカスタマイズする

Actions を使用すると、返されるアクセストークンのスコープを変更したり、アクセストークンや にクレームを追加したりできます。 (Actions の詳細については、Auth0 Actions を参照してください。) そのためには、次の Action を追加します。これは、ユーザーが認証された後に実行されます。
スコープは、Action の実行後にトークン内で利用できるようになります。
Auth0 は、OpenID Connect (OIDC) specification で定義されている構造化クレーム形式でプロファイル情報を返します。つまり、ID トークンまたはアクセストークンに追加するカスタムクレームは、競合の可能性を避けるため、ガイドラインと制限事項に従う 必要があります。

レルムのサポートを設定する

Auth0 では、リソース所有者パスワードグラントと同様の機能を提供する拡張グラントを利用できます。これにより、別々のユーザーディレクトリ (それぞれ別の接続に対応) を維持したまま、フロー中にどれを使用するかを指定できます。 この方法を使用するには、次の操作が必要です。
  • grant_type リクエストパラメーターを http://auth0.com/oauth/grant-type/password-realm に設定します。
  • realm という追加のリクエストパラメーターを送信し、ユーザーが属するレルムの名前を設定します。たとえば、社内従業員向けに employees という名前のデータベース接続を設定しており、ユーザーがその接続に属している場合は、realmemployees に設定します。

レルムとしての接続

アクティブ認証をサポートする接続であれば、データベース接続パスワードレス接続AD/LDAPADFSAzure Active Directory のエンタープライズ接続を含め、レルムとして設定できます。

MFA を設定する

Resource Owner Password Flow を使用する必要があり、より強固な認証が必要な場合は、 (MFA) を追加できます。詳しくは、MFA を使用した Resource Owner Password Flow での認証 をご覧ください。

攻撃対策を設定する

を有効にした状態でResource Owner Password Flowを使用すると、一部の機能が正常に動作しない場合があります。ただし、一般的な問題の一部は回避できます。詳しくは、Resource Owner Password Flowと攻撃対策に関する一般的な問題を回避するを参照してください。

詳細情報