Client-Initiated Backchannel Authentication (CIBA) 機能を使用するには、Enterprise プランまたは適切なアドオンが必要です。詳細については、Auth0 Pricing を参照してください。

- 前提条件
- ステップ 1: クライアントアプリケーションが CIBA リクエストを開始する
- ステップ 2: Auth0 テナントが CIBA リクエストを受け付ける
- ステップ 3: クライアントアプリケーションがレスポンスをポーリングする
- ステップ 4: モバイルアプリケーションがプッシュ通知を受信する
- ステップ 5: モバイルアプリケーションが同意の詳細を取得する
- ステップ 6: モバイルアプリケーションが同意の詳細をユーザーに表示する
- ステップ 7: モバイルアプリケーションがユーザーのレスポンスを Auth0 に送信する
- ステップ 8: フロー完了後に Auth0 がユーザーのレスポンスを受信する
- ステップ 9: Auth0 がアクセストークンをクライアントアプリケーションに返す
前提条件
- テナントとアプリケーションに対して、Client-Initiated Backchannel Authentication を構成し、モバイルプッシュ通知も含めて設定します。
requested_expiryパラメーターを、秒単位で 300 以下の値に設定します。詳細については、通知チャネルの構成を参照してください。
ステップ 1: クライアント アプリケーションが CIBA リクエストを開始する
/bc-authorize エンドポイントに CIBA リクエストを送信します。
- cURL
- C#
- Go
- Java
| パラメーター | 説明 |
|---|---|
tenant | テナント名。カスタムドメインを指定することもできます。iss_sub フォーマットが使用されている場合、テナント名は iss クレーム内で渡されます。 |
client_id | クライアントアプリケーションの識別子。 |
client_secret | CIBA を用いたユーザー認証に使用されるクライアント認証方式。例: クライアントシークレット、Private Key JWT、mTLS Authentication など。Private Key JWT または mTLS を使用する場合、クライアントシークレットを含める必要はありません。 |
scope | openid を必ず含める必要があります。スコープには任意で offline_access を含めてリフレッシュトークンを要求できます。ただし、CIBA Flow によるトランザクションのワンタイム認可では、リフレッシュトークンは不要であり、このコンテキストでは意味を持ちません。 |
user_id | login_hint 構造内で渡される、認可を行うユーザーのユーザー ID。iss_sub フォーマットが使用されている場合、ユーザー ID は sub クレーム内で渡されます。ユーザー ID の形式は、外部プロバイダによって異なる場合があります。 |
requested_expiry | CIBA セッションを有効にしておく最大時間(秒)。CIBA フローの requested expiry は 1 ~ 259200 秒(72 時間)の範囲で指定でき、デフォルトは 300 秒です。CIBA フローにカスタムの有効期限を設定するには、requested_expiry パラメータを含めてください。requested_expiry パラメータは、CIBA が使用する通知チャネルを決定する際に役立ちます。
|
binding_message | 認証デバイスと利用デバイス間で CIBA フローを関連付けるために使用される、人間が読めるメッセージ。binding_message は必須で、最大 64 文字まで指定できます。英数字と +-_.,:# の文字のみを使用してください。 |
認可を行うユーザーごとに、1 分あたり 5 件を超えるリクエストは送信されないレート制限があります。
ステップ 2: Auth0 テナントが CIBA リクエストを受け付ける
POST リクエストを正常に受信すると、そのリクエストを参照する auth-req-id を含んだレスポンスが返されます。
auth_req_id の値は、CIBA フローの完了をポーリングするために /token エンドポイントに渡されます。
Step 3: クライアントアプリケーションがレスポンスをポーリングする
urn:openid:params:grant-type:ciba グラントタイプと、/bc-authorize エンドポイントから受け取った auth_req_id を使って /token エンドポイントを呼び出します。
- cURL
- C#
- Go
- Java
description の内容は、バックオフ間隔に応じて変化します。
/token エンドポイントのポーリングを行ってください。
ステップ 4: モバイルアプリケーションがプッシュ通知を受信する
Notification インスタンスを返すためのメソッドを提供します。Notification インスタンスには、トランザクションを関連付けるための ID(txlinkid)が含まれており、モバイルアプリケーションはこの ID を使用して Auth0 から同意の詳細を取得します。
次のコードサンプルは、Guardian SDK を使用した iOS および Android 向けモバイルプッシュ通知実装の例です。
- iOS
- Android
ステップ 5: モバイルアプリケーションが同意の詳細を取得する
binding_message の内容である同意の詳細を取得します。
カスタムアプリを使用している場合、次のコードサンプルは Auth0 Consent API からデータを取得する iOS と Android の実装例です。
- iOS
- Android
ステップ 6: モバイルアプリケーションがユーザーに同意内容を提示する
binding_message、scope、audience を含む同意内容を、Auth0 Guardian アプリまたは Auth0 Guardian ソフトウェア開発キット (SDK) と統合されたカスタムアプリに応答として返します。モバイルアプリケーションに返されるスコープは、RBAC ポリシーに基づいてフィルタリングされます。詳細は、ロールベースのアクセス制御 を参照してください。
モバイルアプリケーションは、認証リクエストまたは同意内容、あるいはその両方をユーザーに提示します。
次のコードサンプルは、Auth0 Consent API からのレスポンス例です。
ステップ 7: モバイル アプリケーションがユーザーからの応答を Auth0 に送信する
ユーザーが認証リクエストを許可する
- iOS
- Android
ユーザーが認証リクエストを拒否する
- iOS
- Android
ステップ 8: フロー完了後に Auth0 がユーザーの応答を受信する
/token エンドポイントからの応答を受信すると、ポーリングを終了します。CIBA フローでは、常に認可を行うユーザーからの承認または拒否のいずれかの応答が必要であり、既存の認可グラントは考慮されません。
ステップ 9: Auth0 がクライアントアプリケーションにアクセストークンを返す
refresh_token は、最初の /bc-authorize リクエストに offline_access スコープが含まれていた場合にのみ返されます。