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

前提条件

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

手順

  1. コードベリファイアを作成する: Auth0 に送信してトークンをリクエストするための code_verifier を生成します。
  2. コードチャレンジを作成する: code_verifier から code_challenge を生成し、これを Auth0 に送信して authorization_code をリクエストします。
  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 を作成する

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

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 scope を含め、Auth0 Dashboard で API の オフラインアクセスの許可 を有効にした場合にのみ、レスポンスに含まれます。
リフレッシュトークンは、ユーザーが実質的に永続して認証済みの状態を保てるようにするため、厳重に保管する必要があります。

API を呼び出す

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

リフレッシュトークン

このチュートリアルをここまで進め、次の内容を完了していれば、すでにリフレッシュトークンを受け取っています。
  • API をオフラインアクセスの許可に対応するよう設定した
  • authorize endpoint を通じて認証リクエストを開始する際に、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 は、ユーザーの認証後に実行されます。
スコープは、Action の実行後にトークンで利用できるようになります。
Auth0 は、OpenID Connect (OIDC) specification で定義されているとおり、構造化されたクレーム形式でプロファイル情報を返します。つまり、ID トークンまたはアクセストークンに追加するカスタムクレームは、競合が発生する可能性を避けるため、ガイドラインと制限事項に準拠する必要があります

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

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

詳しくはこちら