メインコンテンツへスキップ
このチュートリアルでは、ネイティブアプリ、モバイルアプリ、またはシングルページアプリから、PKCE を使用する認可コードフローを使って独自の API を呼び出す方法を説明します。フローの仕組みと、これを使用すべき理由については、Authorization Code Flow with Proof Key for Code Exchange (PKCE) を参照してください。ネイティブアプリ、モバイルアプリ、またはシングルページアプリにログインを追加する方法については、Add Login Using Authorization Code Flow with PKCE を参照してください。
Auth0 では、次を使用してアプリに PKCE を使用する認可コードフローを簡単に実装できます。

前提条件

このチュートリアルを始める前に:
  • Auth0 にアプリケーションを登録する
    • アプリケーションの種類に応じて、Application TypeNative または Single-Page App を選択します。
    • Allowed Callback URL{yourCallbackUrl} を追加します。コールバック URL の形式は、アプリケーションの種類とプラットフォームによって異なります。アプリケーションの種類およびプラットフォームごとの形式について詳しくは、Native/Mobile クイックスタートSingle-Page App クイックスタート を参照してください。
    • アプリケーションの Grant Types認可コード が含まれていることを確認します。手順については、Grant Types を更新する を参照してください。
    • アプリケーションでリフレッシュトークンを使用できるようにするには、アプリケーションの Grant Typesリフレッシュトークン が含まれていることを確認します。手順については、Grant Types を更新する を参照してください。リフレッシュトークンの詳細については、Refresh Tokens を参照してください。
  • Auth0 に API を登録する
    • API が以前のトークンの有効期限が切れたときに新しいトークンを取得できるよう、API でリフレッシュトークンを受け取れるようにするには、Allow Offline Access を有効にします。

手順

  1. code verifier を作成: トークンをリクエストするために Auth0 に送信する code_verifier を生成します。
  2. code challenge を作成: Auth0 に送信して authorization_code をリクエストするための code_challenge を、code_verifier から生成します。
  3. ユーザーを認可: ユーザーの認可を取得し、authorization_code とともにアプリへリダイレクトします。
  4. トークンをリクエスト: authorization_codecode_verifier を使ってトークンを取得します。
  5. API を呼び出す: 取得したアクセストークンを使用して API を呼び出します。
  6. トークンを更新: 既存のトークンの有効期限が切れたら、リフレッシュトークンを使用して新しいトークンをリクエストします。
任意: サンプルのユースケースを確認

code verifier を作成する

code_verifier を作成します。これは、後でトークンをリクエストするために Auth0 に送信する、暗号学的にランダムな Base64 エンコード済みのキーです。

JavaScript サンプル

Java の例

Android のサンプル

Swift 5 のサンプル

Objective-C のサンプル

code challenge を生成する

Auth0 に送信して authorization_code をリクエストするため、code_verifier から code_challenge を生成します。

Javascript サンプル

Java サンプル

Swift 5 のサンプル

Objective-C の例

ユーザーを認可する

code_verifiercode_challenge を作成したら、ユーザーの認可を得る必要があります。技術的には、これは の始まりであり、このステップには次のプロセスのうち 1 つ以上が含まれる場合があります。
  • ユーザーを認証する。
  • 認証を処理するため、ユーザーを にリダイレクトする。
  • アクティブな シングルサインオン (SSO) セッションを確認する。
  • 以前に同意が与えられていない場合は、要求された権限レベルに対するユーザーの同意を取得する。
ユーザーを認可するには、アプリはユーザーを 認可 URL にリダイレクトする必要があります。その際、前のステップで生成した code_challenge と、code_challenge の生成に使用したメソッドを含めます。

認可 URL の例

パラメーター
カスタム API を呼び出す際にユーザーを認可する場合は、次の点に注意してください。
  • パラメーターを含める必要があります
  • 対象 API でサポートされている追加のスコープを含めることもできます
例として、API を呼び出す際の認可 URL 用 HTML スニペットは次のようになります。

レスポンス

正常に処理されると、HTTP 302 レスポンスが返されます。認可コードは URL の末尾に含まれます。

トークンを要求する

認可コードを取得したら、それをトークンと交換する必要があります。前の手順で取得した認可コード (code) を使用し、code_verifier を含めて トークンURLPOST します。

トークンURLへのPOSTリクエストの例

パラメーター

レスポンス

正常に処理されると、access_tokenrefresh_tokenid_tokentoken_type の各値を含むペイロードを含む HTTP 200 レスポンスが返されます。
トークンは保存する前に検証してください。手順については、IDトークンを検証するおよびアクセストークンを検証するを参照してください。
IDトークンには、デコードして取り出す必要があるユーザー情報が含まれています。 アクセストークンは、Auth0 Authentication API の /userinfo エンドポイントまたは別の API を呼び出すために使用します。独自の API を呼び出す場合、最初に必要になるのは、アクセストークンを検証することです。 リフレッシュトークンは、前の または の有効期限が切れた後に、新しいトークンを取得するために使用します。refresh_token は、offline_access スコープを含め、Dashboard で API の Allow Offline Access を有効にした場合にのみレスポンスに含まれます。
リフレッシュトークンがあると、ユーザーは実質的に無期限で認証済みの状態を維持できるため、厳重に保管する必要があります。

API を呼び出す

ネイティブアプリケーションまたはモバイルアプリケーションから API を呼び出すには、アプリケーションで取得したアクセストークンを Bearer トークンとして HTTP リクエストの Authorization ヘッダーに渡す必要があります。

リフレッシュトークン

このチュートリアルに沿って進め、次の内容を完了していれば、すでにリフレッシュトークンを受け取っています。
  • API を設定してオフラインアクセスを許可した
  • authorize エンドポイントを通じて認証リクエストを開始する際に、offline_access スコープを含めた
新しいアクセストークンを取得するには、を使用できます。通常、ユーザーが新しいアクセストークンを必要とするのは、前のトークンの有効期限が切れた後か、新しいリソースへのアクセスが初めて必要になったときだけです。API を呼び出すたびに新しいアクセストークンを取得するためにこのエンドポイントを呼び出すのはベストプラクティスではありません。また、Auth0 ではレート制限が適用されているため、同じ IP から同じトークンを使用してそのエンドポイントに実行できるリクエスト数は制限されます。 トークンを更新するには、grant_type=refresh_token を使用して、Authentication API の /oauth/token エンドポイントに POST リクエストを送信します。

トークンURLへのPOSTの例

パラメーター

レスポンス

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

使用例

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

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

サンプルアプリケーションを見る: モバイルアプリ + API

実装例については、アーキテクチャシナリオのモバイル + APIを参照してください。この一連のチュートリアルには、GitHubで参照できるコードサンプルも用意されています。

詳しく見る