Skip to main content
クライアント起点バックチャネル認証 (CIBA) 機能を使用するには、エンタープライズプランまたは適切なアドオンが必要です。詳しくは、Auth0 Pricing を参照してください。
クライアント起点バックチャネル認証 (CIBA) は、開始元のアプリケーションでユーザーによる直接操作を必要とせずに、クライアントアプリケーションが認証および/または を開始できるようにする の仕様です。Rich Authorization Requests (RAR) は OAuth 2.0 の拡張機能で、クライアントアプリケーションが認可リクエストで標準的な OAuth 2.0 スコープを超える、より複雑な権限を要求できるようにします。 CIBA と RAR を組み合わせると、バックチャネルリクエストで データを に渡せます。authorization_details パラメーターには、ユーザーに表示する同意プロンプトでカスタマイズできるリクエストの詳細が含まれます。 CIBA では、次の通知チャネルを使用してユーザーを認可できます。

一般的なユースケース

リソースへのアクセスをよりきめ細かく制御する必要があるユースケースでは、RAR を CIBA フローと組み合わせて使用します。一般的なユースケースには、次のようなものがあります。
  1. 支払いアプリが、送金を確認するようユーザーに求めます。authorization_details は、トランザクションの詳細を表示するようにカスタマイズできます。
  2. AI エージェントが、変更後の診察予約の詳細をユーザーに提示します。authorization_details は、新しい日時を表示するようにカスタマイズできます。

仕組み

CIBA を使用したユーザー認可フローは、CIBA を使用したユーザー認証フローと似ており、RAR のサポートにより、クライアントは /bc-authorize エンドポイントを介して authorization_details を認可サーバーに渡すことができます。 次のシーケンス図は、CIBA を使用したユーザー認可フローのエンドツーエンドの流れを示しています。
以下のセクションでは、CIBA でのユーザー認可の仕組みを手順ごとに説明します。

前提条件

Auth0 を使用して CIBA リクエストを開始するには、次の設定が必要です。

ステップ 1: クライアントアプリケーションが CIBA リクエストを開始する

User Search APIs を使用して、CIBA リクエストを開始する対象の認可を行うユーザーを特定し、そのユーザー ID を取得します。 認可を行うユーザーのユーザー ID を取得したら、Authentication API を使用して、authorization_details を含む CIBA リクエストを /bc-authorize エンドポイントに送信します。

ステップ 2: Auth0 テナントが CIBA リクエストの受領を確認する

Auth0 テナントが POST リクエストを正常に受信すると、リクエストを参照する auth-req-id を含むレスポンスを受け取ります。
auth_req_id の値は、CIBA フローの完了をポーリングするために /token エンドポイントに渡されます。

ステップ 3: クライアントアプリケーションが応答をポーリングする

Authentication API を使用して、urn:openid:params:grant-type:ciba グラントタイプと /bc-authorize エンドポイントから受け取った auth_req_id を指定し、/token エンドポイントを呼び出します。
ユーザーがトランザクションを承認するまで、次のレスポンスが返されます。
ポーリングの間隔は約 5 秒です。頻繁にポーリングしすぎると、次のレスポンスが返されます。description の内容は、バックオフ間隔に応じて異なります。
エラーを解消するには、次のポーリング間隔 (秒) まで待ってから、/token エンドポイントをポーリングしてください。

ステップ 4: 認証デバイスが通知を受信する

通知チャネルに応じて、Auth0 は認証デバイスに通知を送信します。
  • モバイルプッシュ通知: Auth0 は Auth0 Guardian アプリ、または Auth0 Guardian SDK を統合したカスタムモバイルアプリに送信します。
  • メール通知: Auth0 はユーザーの確認済みメールアドレスに送信します。
認証デバイスは、Auth0 Consent API から同意の詳細、つまり binding_message の内容を取得します。
  • モバイルプッシュ通知: Auth0 Guardian アプリ、または Auth0 Guardian SDK を統合したカスタムアプリが Auth0 Consent API を呼び出し、同意の詳細を取得します。
  • メール通知: ユーザーが確認用リンクをクリックするとブラウザーにリダイレクトされ、そのブラウザーが Auth0 Consent API から同意の詳細を取得します。
Auth0 Consent API は、binding_messagescopeaudience、および設定されている場合は authorization_details を含む同意の詳細を認証デバイスに返します。モバイルアプリケーションに返されるスコープは、RBAC ポリシーに従ってフィルタリングされます。詳しくは、ロールベースアクセス制御 を参照してください。 次のコードサンプルは、Auth0 Consent API からのレスポンス例です。
認証デバイスは、authorization_details を含む同意の詳細をユーザーに表示します。 この時点で、ユーザーは認可リクエストを承諾または拒否できます。

ステップ 7: 認証デバイスがユーザーの応答を Auth0 に返す

ユーザーが認可リクエストを承認または拒否すると、認証デバイスはその応答を Auth0 に返します。
  • モバイルプッシュ通知: Auth0 Guardian アプリ、または Auth0 Guardian SDK と統合されたカスタムアプリが、ユーザーの応答を Auth0 に返します。
  • メール通知: ブラウザーがユーザーの応答を Auth0 に返します。

ステップ 8: フローの完了後、Auth0 がユーザーの応答を受信する

クライアントアプリケーションは、/token エンドポイントから応答を受信すると、ポーリングを終了します。CIBA フローでは、認可を行うユーザーからの承認または拒否の応答が常に必要であり、既存のグラントは確認されません。つまり、Auth0 はすべての CIBA リクエストを、認可を行うユーザーによる新たな認可として扱います。

ステップ9: Auth0 がクライアントアプリケーションにアクセストークンを返す

ユーザーがプッシュリクエストを拒否すると、Auth0 は次のようなエラーレスポンスをクライアントアプリケーションに返します。
ユーザーがプッシュリクエストを承認すると、Auth0 は次のような authorization_details を含むをクライアントアプリケーションに返します。
refresh_token は、最初の /bc-authorize リクエストに offline_access スコープが含まれていた場合にのみ返されます。

authorization_details を照会する

コンパイル時には、JSON を動的にクエリする場合と同様に、同意の詳細から authorization_details の型とオブジェクトを型安全に照会できます。
オブジェクトを表すカスタム型を定義している場合は、filterAuthorizationDetailsByType() 関数を使用して、目的の型に一致するすべての authorization_details オブジェクトを返すことができます。 次のコードサンプルでは、payment 型の authorization_details を照会します。
filterAuthorizationDetailsByType() は、指定した authorization_details 型に一致するオブジェクトのみを返します。そのため、リクエストの内容をユーザーが完全に理解できるようにするには、型に関係なく、モバイルアプリケーションですべての関連する authorization_details を同意のためにユーザーに提示する必要があります。 AI エージェントまたはアプリケーションがレスポンスを取得するために /oauth/token エンドポイントをポーリングするときにも、authorization_details を照会できます。
認可を行うユーザーがリクエストを承認すると、Auth0 はユーザーの応答を受信し、CIBA フローが完了して、アクセストークンと authorization_details 配列が返されます。

制限事項

Auth0 は以下をサポートしていません。
  • CIBA フローの Actions で RAR を変更すること。
  • クライアントが検出できるように RAR タイプを公開すること。つまり、クライアントが送信可能な authorization_details タイプを事前に登録しておく必要があります。
  • API で許可されているタイプに一致する type プロパティを持っているかどうかの確認を超える、RAR オブジェクトの検証。authorization_details 内の内容の詳細な検証は、リソースサーバー側で行う必要があります。詳しくは、Configure RAR を参照してください。

詳細