Skip to main content
このチュートリアルでは、ハイブリッドフローを使用して独自のAPIを呼び出す方法を説明します。このフローの仕組みや、使用する理由について詳しく知りたい場合は、ハイブリッドフローを参照してください。
Auth0 を使うと、次の方法でアプリに認可コードフローを簡単に実装できます。
  • Authentication API: 独自のソリューションを構築したい場合は、このまま読み進めて、API を直接呼び出す方法を確認してください。

前提条件

このチュートリアルを始める前に、以下を行ってください。
  • Auth0 にアプリケーションを登録する
    • 適切な Application Type を選択します。
    • Allowed Callback URL{https://yourApp/callback} を追加します。
    • アプリケーションの Grant TypesImplicitAuthorization Code が含まれていることを確認してください。方法については、Grant Types を更新するを参照してください。
    • アプリケーションで リフレッシュトークン を使用できるようにするには、アプリケーションの Grant Typesリフレッシュトークン が含まれていることを確認してください。方法については、Grant Types を更新するを参照してください。リフレッシュトークン の詳細については、リフレッシュトークンを参照してください。
  • Auth0 に API を登録する
    • API が、以前のトークンの有効期限が切れた際に新しいトークンを取得するための リフレッシュトークン を受け取れるようにするには、オフラインアクセスの許可 を有効にしてください。

手順

  1. ユーザーを認可する: ユーザーの認可を求め、認可コードを付与してアプリにリダイレクトします。
  2. トークンをリクエストする: 認可コードをトークンと交換します。
  3. API を呼び出す: 取得したアクセストークンを使用して API を呼び出します。
  4. リフレッシュトークン: 既存のトークンの有効期限が切れたら、リフレッシュトークンを使用して新しいトークンをリクエストします。
任意: サンプルのユースケースを見る

ユーザーを認可する

このステップには、次のプロセスのうち 1 つ以上が含まれる場合があります。
  • ユーザーを認証する
  • 認証を行うために、ユーザーを にリダイレクトする
  • 有効な (SSO) セッションがあるかどうかを確認する
  • 以前に同意が与えられていない場合は、要求された権限レベルに対するユーザーの同意を得る。
ユーザーを認可するには、アプリでユーザーを認可 URLに誘導する必要があります。

認可 URL の例

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

レスポンス

すべてが正常に進むと、HTTP 302 レスポンスが返されます。要求した資格情報はレスポンスボディにエンコードされています。
返される値は、response_type として何をリクエストしたかによって異なる点に注意してください。 また、認可 URL の呼び出しに含めた state 値も Auth0 から返されます。
このトランザクションで受け取るアクセストークンは、最初に受け取るアクセストークンにすぎません。API の呼び出しには使用しないことを推奨します。
トークンは保存する前に検証してください。方法については、Validate ID TokensValidate Access Tokens を参照してください。
をデコードして解析すると、code のハッシュを含む c_hash という追加のクレームがあることに気付くでしょう。このクレームは、code と同時に ID トークンが発行される場合に必須であり、検証する必要があります。
  1. ID トークンヘッダーの alg クレームで指定されたハッシュアルゴリズムを使用して、code の ASCII 表現のオクテットをハッシュ化します。
  2. ハッシュの左半分を Base64url エンコードします。
  3. 結果が c_hash の値と一致することを確認します。

トークンを取得する

認可コードを取得したら、次はそれをトークンに交換する必要があります。前のステップで取得した認可コード (code) を使って、トークン URLPOST します。 このステップで受け取る は、API の呼び出しに使用するものです。このチュートリアルの前のステップで受け取ったアクセストークンとは、別のものとして管理してください。

token URL に POST する例

パラメーター

レスポンス

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

API を呼び出す

通常の Web アプリケーション (または、アプリケーションの資格情報を安全に保存できる同様のケース) から API を呼び出すには、アプリケーションは取得したアクセストークンを、HTTP リクエストの Authorization ヘッダーで Bearer トークンとして渡す必要があります。

リフレッシュトークン

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

Token URL に POST する例

パラメーター

レスポンス

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

使用例

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

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

詳細情報