メインコンテンツへスキップ
エンドツーエンドの XAA フローをテストするには、Requesting App から送信される JWT-Bearer リクエストを Auth0 テナントが受け入れられることを確認する必要があります。これには、追加設定なしで Auth0 が対応します。 エンドツーエンドの XAA フローをテストする前に、次の点を確認してください。
  • Redirect URI フィールドを、Okta テナントで Requesting App として動作するテスト用アプリケーションのコールバック URL に更新します。詳細は、Register the Requesting App in Okta を参照してください。
  • 次の情報を Okta の担当者に提供します。
    • Auth0 テナントの issuer URL。Resource App は Okta Integration Network (OIN) でこの issuer URL に関連付けられているため、Requesting App は ID-JAG をリクエストする際にこれを参照できます。
    • OIN 内の各 Requesting App に対応する Auth0 の client_id
Auth0 テナント内で issuer URL とクライアントIDを取得するには、Applications に移動し、対象のアプリケーションを選択して Settings を開きます。
FieldInstructionsExample
Issuer URLAuth0 のドメインをコピーし、先頭に https:// を付けて、末尾にスラッシュを追加します。https://tenant.region.auth0.com/ または、顧客がカスタムドメインを使用している場合は https://custom-domain.com/
client_idアプリケーションのクライアントIDをコピーします。ovBLQycaVq6I0Xyuhq84pwDVyJeXWLyx

IDトークンを ID-JAG に交換する

まず、Okta のテストテナントを使用して Requesting App にログインする必要があります。ログインに成功し、同意を与えると、Okta は認可コードを付与してブラウザーを Requesting App にリダイレクトします。続いて、Requesting App はその認可コードを安全に Okta のアクセストークンと IDトークン に交換します。 Okta の IDトークン を ID-JAG に交換するには、Requesting App は次のパラメーターを指定して、Okta テストテナントの /token エンドポイントに token exchange request を送信します。
POST /oauth2/v1/token HTTP/1.1
Host: {{YOUR_TENANT}}.okta.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:token-exchange
&requested_token_type=urn:ietf:params:oauth:token-type:id-jag
&audience={{YOUR_AUTH0_TENANT_ISSUER_URL}}
&resource={{YOUR_AUTH0_TENANT_API_AUDIENCE}}
&subject_token={{OKTA_ID_TOKEN}}
&subject_token_type=urn:ietf:params:oauth:token-type:id_token
&client_id={{REQUESTING_APP_CLIENT_ID_IN_OKTA}}
&client_secret={{REQUESTING_APP_CLIENT_SECRET_IN_OKTA}}
パラメーター説明
grant_typeグラントタイプです。トークン交換のグラントタイプ urn:ietf:params:oauth:grant-type:token-exchange に設定します。
requested_token_typeクライアントが認可サーバーから受け取りたいトークンの種類です。Identity Assertion Authorization Grant (ID-JAG) urn:ietf:params:oauth:token-type:id-jag に設定します。
audience最終的なトークンの想定される受信者です。Auth0 テナントの issuer URL、またはその URL 上に認可サーバーがある Resource App に設定します。
resource任意です。クライアントがアクセスしたい Resource App の API です。認可サーバーが最終的なアクセストークンを発行するとき、このリソースはトークンの aud クレームに含まれ、Resource App の API はそれを検証に使用します。resource パラメーターを指定しない場合、アクセストークンを取得する次のリクエストでは、テナントに設定したデフォルトのオーディエンスが使用されます。Auth0 テナント内の有効な API オーディエンスと一致しない resource を指定しても、トークン交換リクエスト自体は失敗せず、ID-JAG は返されます。ただし、その ID-JAG を使用してアクセストークンを取得する後続のリクエストは、Auth0 テナントによって拒否されます。
subject_tokenクライアントが交換するトークンです。XAA では、subject token はユーザーの ID の「証明」または「アサーション」です。IdP がユーザーの ID を検証するために使用する Okta の IDトークンに設定します。
subject_token_typesubject_token パラメーターで指定するトークンの種類です。XAA では、認可サーバーに IDトークンを提示することを示します。
client_idトークン交換リクエストを行う enterprise IdP 内の Requesting App のクライアントIDです。
client_secretRequesting App が enterprise IdP に対して自身を認証するために使用するクライアントシークレットです。
XAA Beta では、Okta の /token エンドポイントにスコープを渡すことはサポートされていません。Requesting App が ID-JAG を受け取った後、Auth0 の /token エンドポイントに対する次のリクエストでスコープを設定できます。 本番環境では、Requesting App はお客様の Okta テナントの /token エンドポイントにトークン交換リクエストを送信します。

ID-JAG を Auth0 の /token エンドポイントに送信する

Requesting App は ID-JAG を取得すると、Auth0 テナントの /token エンドポイントにアクセストークンリクエストを送信します。
POST https://{{YOUR_AUTH0_TENANT_DOMAIN}}/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
&client_id={{REQUESTING_APP_CLIENT_ID_IN_AUTH0}}
&client_secret={{REQUESTING_APP_CLIENT_SECRET_IN_AUTH0}}
&scope=scope1%20scope2%20
&assertion={{ID_JAG}}
パラメーター説明
grant_typeグラントタイプです。これにより、認可サーバーは、リクエスト内の主たる認証情報として JSON Web Token (JWT) が送信されることを想定します。
client_idAPI 呼び出しを行う Resource App 認可サーバー内の Requesting App のクライアントIDです。
client_secretAPI 呼び出しを行う Resource App 認可サーバー内の Requesting App のクライアントシークレットです。
scopeRequesting App がアクセストークンに対して要求する権限のセットです。
assertionID アサーションのベアラーとして機能する ID-JAG または JSON Web Token (JWT) です。
Auth0 認可サーバーは、ユーザーの本人確認のために ID-JAG を検証した後、Auth0 テナント内の対象 API オーディエンスを利用するためのアクセストークンを発行します。このアクセストークンには、RBAC と Auth0 テナントで設定されたその他のポリシーで許可された、要求したスコープも含まれます。 Auth0 認可サーバーは、ID-JAG トークン交換への応答としてリフレッシュトークンを発行しません。そのため、Requesting App は XAA 経由で新しいアクセストークンを取得するために、エンタープライズ IdP から新しい ID-JAG を取得し、該当するアクセス制御を受ける必要があります。