/tokenエンドポイントに送信してAPI用のアクセストークンを取得する方法を説明します。
ID-JAG を取得する
SAML Requesting App
refresh_token と交換し、その後 refresh_token を ID-JAG と交換します。
SAML レスポンス => SAML Assertion => refresh_token => ID-JAG
IdP から SAML レスポンス を受け取ったら、SAML library を使用して SAML アサーション を抽出します。以下に SAML レスポンス の例を示します。
xmllint コマンドラインツールを使用して、SAML アサーション を抽出できます。
/token エンドポイントにトークン交換リクエストを送信します。
IdP クライアントが confidential の場合、
client_secret または client_assertion のいずれかが Form Post または HTTP ヘッダーで送信されます。そのため、両者は同時に使用できず、任意としてマークされています。
呼び出しが成功すると、JSON レスポンスの access_token プロパティに refresh_token が返されます。
refresh_token を ID-JAG と交換するには、以下のパラメータを指定して、IdP の /token エンドポイントに対して別のトークン交換リクエストを行います。
IdP クライアントが confidential の場合、
client_secret または client_assertion のいずれかが Form Post または HTTP ヘッダーで送信されます。そのため、両者は同時に使用できず、任意としてマークされています。
この呼び出しのレスポンスには、access_token プロパティ内に ID-JAG が含まれます。
Resource App が SAML アプリケーションの場合、ID-JAG には標準の
sub クレームに加え、認証済みユーザーの SAML NameID の詳細 (format、issuer、nameid、nameid_format) を含む sub_id クレームも含まれます。OIDC Requesting App
ID トークン => ID-JAG
ID トークンを ID-JAG に交換するため、Requesting App は次のパラメータを指定して、IdP の /token エンドポイントにトークン交換リクエストを送信します。
IdP クライアントが confidential の場合、
client_secret または client_assertion のいずれかを Form Post または HTTP ヘッダーで送信します。そのため、これらは相互排他的であり、任意としてマークされています。
ID-JAG を Auth0 の /token エンドポイントに送信する
/token エンドポイントに送信します。
Requesting App が confidential client の場合、
client_secret または client_assertion のいずれかが form post または HTTP ヘッダーで送信されます。そのため、両者は相互排他的であり、任意としてマークされています。
Auth0 認可サーバーは、ユーザーのアイデンティティを確認するために ID-JAG を検証した後、Auth0 テナント内の API 用のアクセストークンを発行します。アクセストークンには、Auth0 テナントで設定されたロールベースのアクセス制御やその他のポリシーで許可された、request した スコープ も含まれます。
Auth0 認可サーバーは、ID-JAG token exchange への応答としてリフレッシュトークンを発行しません。そのため、Requesting App が XAA を介して新しいアクセストークンを取得するには、enterprise IdP から新しい ID-JAG を取得し、該当するアクセス制御を受ける必要があります。
詳しくはこちら
- Auth0 Cross App Access Inspector: OktaとAuth0間のXAAフローをテストするためのシンプルなNode.jsアプリケーションです。
- XAA.dev: ブラウザーでCross App Accessをテストできるオンラインsandboxです。