このチュートリアルでは、PKCE を使用した Authorization Code フローを使って、ネイティブアプリ、モバイルアプリ、またはシングルページアプリから独自の API を呼び出す方法を説明します。このフローの仕組みと、これを使用すべき理由については、Authorization Code Flow with Proof Key for Code Exchange (PKCE) を参照してください。ネイティブアプリ、モバイルアプリ、またはシングルページアプリにログインを追加する方法については、Add Login Using Authorization Code Flow with PKCE を参照してください。
- Auth0 Mobile SDKs と Auth0 Single-Page App SDK: フローを実装する最も簡単な方法で、多くの複雑な処理を代わりに行ってくれます。Mobile Quickstarts と Single-Page App Quickstarts では、手順を順を追って説明しています。
- Authentication API: 独自のソリューションを構築したい場合は、このまま読み進めて API を直接呼び出す方法を確認してください。
前提条件
-
Auth0 でアプリケーションを登録する.
- アプリケーションの種類に応じて、Application Type で Native または Single-Page App を選択します。
- Allowed Callback URL に
{yourCallbackUrl}を追加します。コールバック URL の形式は、アプリケーションの種類とプラットフォームによって異なります。アプリケーションの種類とプラットフォームごとの形式について詳しくは、Native/Mobile Quickstarts および Single-Page App Quickstarts を参照してください。 - アプリケーションの Grant Types に 認可コード が含まれていることを確認してください。設定方法については、Grant Types を更新する を参照してください。
- アプリケーションでリフレッシュトークンを使用できるようにする場合は、アプリケーションの Grant Types に Refresh Token が含まれていることを確認してください。設定方法については、Grant Types を更新する を参照してください。リフレッシュトークンの詳細については、Refresh Tokens を参照してください。
-
Auth0 で API を登録する
- API がリフレッシュトークンを受け取り、以前のトークンの有効期限が切れたときに新しいトークンを取得できるようにするには、オフラインアクセスの許可 を有効にします。
手順
- コードベリファイアを作成する:
Auth0 に送信してトークンをリクエストするための
code_verifierを生成します。 - コードチャレンジを作成する:
code_verifierからcode_challengeを生成し、これを Auth0 に送信してauthorization_codeをリクエストします。 - ユーザーを認可する:
ユーザーの認可をリクエストし、
authorization_codeとともにアプリへリダイレクトします。 - トークンをリクエストする:
authorization_codeとcode_verifierをトークンと引き換えます。 - API を呼び出す: 取得したアクセストークンを使って API を呼び出します。
- リフレッシュトークンを使用する: 既存のトークンの有効期限が切れたときに、新しいトークンをリクエストするためにリフレッシュトークンを使用します。
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_verifier と code_challenge を作成したら、ユーザーの認可を得る必要があります。これは技術的には の始まりにあたり、このステップには次のプロセスの 1 つ以上が含まれることがあります。
- ユーザーを認証する。
- 認証を行うため、ユーザーを にリダイレクトする。
- 有効な シングルサインオン (SSO) セッションがあるか確認する。
- 以前に同意が与えられていない場合は、要求された権限レベルについてユーザーの同意を得る。
code_challenge と、code_challenge の生成に使用したメソッドを含めます。
パラメータ
カスタム API の呼び出し時にユーザーを認可する場合は、次の点に注意してください。- パラメータを含める必要があります
- 対象の API でサポートされている追加のスコープを含めることもできます
例として、API の呼び出し時に使用する認可 URL の HTML スニペットは次のようになります。
レスポンス
HTTP 302 レスポンスが返されます。認可コードは URL の末尾に含まれます。
トークンをリクエストする
code) を使い、code_verifier を添えて トークン URL に POST リクエストを送信する必要があります。
トークンURLへのPOST例
パラメーター
レスポンス
access_token、refresh_token、id_token、token_type の各値を含むペイロードとともに、HTTP 200 レスポンスが返されます。
refresh_token は、offline_access scope を含め、Auth0 Dashboard で API の オフラインアクセスの許可 を有効にした場合にのみ、レスポンスに含まれます。
API を呼び出す
リフレッシュトークン
- API をオフラインアクセスの許可に対応するよう設定した
- authorize endpoint を通じて認証リクエストを開始する際に、
offline_accessスコープを含めた
grant_type=refresh_token を使用して、Authentication API の /oauth/token エンドポイントに POST リクエストを送信します。
トークン URL への POST の例
パラメーター
レスポンス
access_token、その有効期間 (秒単位の expires_in) 、付与された scope 値、および token_type を含むペイロードとともに、HTTP 200 レスポンスが返されます。最初のトークンのスコープに openid が含まれている場合、レスポンスには新しい id_token も含まれます。