Skip to main content
PKCE を使用した Authorization Code フローを使うと、Native、モバイル、またはシングルページアプリにログイン機能を追加できます。このフローの仕組みと、これを使用すべき理由については、Authorization Code Flow with Proof Key for Code Exchange (PKCE) をお読みください。Native、モバイル、またはシングルページアプリから API を呼び出す方法については、Call Your API Using PKCE を使用した Authorization Code フロー をお読みください。 Proof Key for Code Exchange (PKCE) を使用した Authorization Code フローを実装するには、次のリソースを利用できます。 ログインに成功すると、アプリケーションはユーザーの を利用できるようになります。ID トークンには基本的なユーザープロファイル情報が含まれ、アクセストークンは Auth0 の /userinfo エンドポイントや独自の保護された API の呼び出しに使用できます。ID トークンの詳細については、ID Tokens をお読みください。アクセストークンの詳細については、Access Tokens をお読みください。

前提条件

Auth0 にアプリケーションを登録します。詳しくは、ネイティブアプリケーションを登録する または シングルページ Web アプリケーションを登録する をご覧ください。
  • アプリケーションの種類に応じて、Application TypeNative または Single-Page App を選択します。
  • Allowed Callback URLYOUR_CALLBACK_URL を追加します。コールバック URL の形式は、アプリケーションの種類とプラットフォームによって異なります。アプリケーションの種類とプラットフォームごとの形式について詳しくは、Native/Mobile QuickstartsSingle-Page App Quickstarts を参照してください。
  • アプリケーションの Grant TypesAuthorization Code が含まれていることを確認します。詳しくは、グラントタイプを更新する をご覧ください。

code verifier を作成

code_verifier を作成します。これは暗号論的にランダムな Base64 エンコード済みのキーで、最終的にトークンをリクエストするために Auth0 に送信されます。 code_verifier を作成するアルゴリズムの詳細については、 Proof Key for Code Exchange 仕様のセクション 4.1 Client Creates a Code Verifier を参照してください。

Javascript のサンプル

Javaサンプル

Androidのサンプル

Swift 5 の例

Objective-C の例

コードチャレンジを作成する

Auth0 に送信して authorization_code をリクエストするための code_challenge を、code_verifier から生成します。 code_challengecode_verifier からどのように導出されるかについて詳しくは、OAuth Proof Key for Code Exchange 仕様の 4.2 Client Creates the Code Challenge を参照してください。

Javascript のサンプル

Java のサンプル

Swift 5 のサンプル

Objective-Cのサンプル

ユーザーの認可を取得する

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

認可 URL の例

パラメータ

例として、アプリに login を追加する際の認可 URL 用 HTML スニペットは次のようになります。

レスポンス

問題なく進めば、HTTP 302 レスポンスが返されます。認可コードは URL の末尾に含まれます。

トークンを取得する

authorization_codecode_verifier をトークンと交換します。 認可コードを取得したら、それをトークンに交換する必要があります。前のステップで取得した認可コード (code) を使って、code_verifier を付けて Token URLPOST リクエストを送信します。

Token URL への POST の例

パラメータ

レスポンス

問題なく処理されると、access_tokenrefresh_tokenid_tokentoken_type の各値を含むペイロードとともに、HTTP 200 レスポンスが返されます:
保存する前にトークンを検証してください。方法については、ID Token を検証するアクセストークンを検証するをご覧ください。
ID トークンには、デコードして取り出す必要があるユーザー情報が含まれています。 アクセストークンは、Auth0 Authentication API の /userinfo エンドポイントまたは他の API を呼び出すために使用されます。独自の API を呼び出す場合、API がまず行う必要があるのは、アクセストークンを検証することです。 リフレッシュトークンは、以前のアクセストークンまたは ID トークンの有効期限が切れたあとに、新しいアクセストークンまたは ID トークンを取得するために使用されます。refresh_tokenがレスポンスに含まれるのは、offline_access scope を含め、Auth0 Dashboard で API のオフラインアクセスの許可を有効にしている場合のみです。
リフレッシュトークンを使うと、ユーザーは実質的に無期限に認証された状態を維持できるため、安全に保管する必要があります。

使用例

基本的な認証リクエスト

この例では、ステップ1でユーザーを認証する際に送信できる、最も基本的なリクエストを示します。Auth0のログイン画面が表示され、設定済みの任意の接続を使ってユーザーがサインインできます。 では、トークンをリクエストすると、ID トークンには最も基本的なクレームが含まれます。ID トークンをデコードすると、次のようになります。

ユーザーの名前とプロフィール画像をリクエストする

通常のユーザー認証に加えて、この例では、名前やプロフィール画像といった追加のユーザー情報をリクエストする方法を示します。 ユーザーの名前とプロフィール画像をリクエストするには、ユーザーを認可する際に適切なスコープを追加する必要があります。 これで、トークンをリクエストすると、ID トークンにはリクエストした名前とプロフィール画像のクレームが含まれるようになります。ID トークンをデコードすると、次のようになります。

GitHub でユーザーをログインさせるよう要求する

通常のユーザー認証に加えて、この例では、GitHub などのソーシャルアイデンティティプロバイダーへユーザーを直接送る方法を示します。この例を機能させるには、Auth0 Dashboard > Authentication > Social に移動して、適切な接続を設定する必要があります。接続名は 設定 タブで確認してください。 ユーザーを GitHub のログイン画面に直接送るには、ユーザーを認可する際に connection パラメーターを渡し、その値を接続名 (この場合は github) に設定する必要があります。 ここでトークンをリクエストすると、ID トークンには、GitHub から返されたユーザーの一意の ID が sub クレームとして含まれます。ID トークンをデコードすると、次のようになります。

詳細情報