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

- 前提条件
- ステップ 1: クライアントアプリケーションが CIBA リクエストを開始する
- ステップ 2: Auth0 テナントが CIBA リクエストを受領する
- ステップ 3: クライアントアプリケーションがレスポンスをポーリングする
- ステップ 4: Auth0 がユーザーのメールアドレスにリンクを送信する
- ステップ 5: ユーザーがブラウザーで認証する
- ステップ 6: ブラウザーがユーザーに同意内容を提示する
- ステップ 7: フロー完了後に Auth0 がユーザーの応答を受信する
- ステップ 8: Auth0 がクライアントアプリケーションにアクセストークンを返す
前提条件
- テナントとアプリケーションについて、Client-Initiated Backchannel Authentication を設定し、メール通知も構成します。
requested_expiryパラメータを 301〜259200 秒(72 時間)の値に設定します。詳細については、通知チャネルの構成を参照してください。- CIBA と Rich Authorization Requests (RAR) を使用したユーザー認可でメール通知を利用する場合は、カスタマイズした同意プロンプトを設定します。
ステップ 1: クライアント アプリケーションが CIBA リクエストを開始する
/bc-authorize エンドポイントに CIBA リクエストを送信します。
- cURL
- C#
- Go
- Java
| パラメーター | 説明 |
|---|---|
tenant | テナント名。カスタムドメイン名の場合もあります。iss_sub フォーマットが使用されている場合、テナント名は iss クレーム内で渡されます。 |
client_id | クライアントアプリケーションの識別子。 |
client_secret | CIBA でユーザー認証を行うために使用されるクライアント認証方法。例として、クライアントシークレット、Private Key JWT、mTLS 認証などがあります。Private Key JWT または mTLS を使用している場合は、クライアントシークレットを含める必要はありません。 |
scope | openid を必ず含める必要があります。スコープには任意で offline_access を含めてリフレッシュトークンを要求できます。ただし、CIBA フローを用いたトランザクションの一度きりの認可では、リフレッシュトークンは不要であり、このコンテキストでは意味を持ちません。 |
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 エンドポイントに渡されます。
ステップ 3: クライアントアプリケーションがレスポンスをポーリングする
urn:openid:params:grant-type:ciba を指定し、/bc-authorize エンドポイントから受け取った auth_req_id を使用して /token エンドポイントを呼び出します:
- cURL
- C#
- Go
- Java
/token エンドポイントをポーリングしてください。
ステップ 4: Auth0 がユーザーのメールアドレスにリンクを送信する
login_hint を使用して、認証デバイス上でユーザー認証を開始します。
- Auth0 認可サーバーは、ユーザーの確認済みメールアドレスにメールを送信します。
- メールには、ユーザーがクリックして認証を完了する必要がある検証リンクが含まれます。
binding_messageはリクエストコードとして表示されます。 - リンクは
/bc-verifyエンドポイントへのリクエストを通じてユーザーのブラウザーにリダイレクトし、そこでconsentクエリパラメーターが同意待ちの CIBA リクエストを参照します。

ステップ 5: ブラウザーでユーザーが認証を行う
/bc-authorize エンドポイントへ送信した login_hint パラメーターで指定された資格情報を使用する必要があります。そうしない場合はエラーメッセージが表示され、ログアウトしてやり直す必要があります。

binding_message、scope、audience が含まれます。スコープは RBAC ポリシーに従ってフィルタリングされます。詳細については、ロールベースのアクセス制御を参照してください。
次のコードサンプルは、Auth0 Consent API からのレスポンス例です。
ステップ 6: ブラウザーがユーザーの応答を Auth0 に送信する
ユーザーが認証リクエストを承認する

ユーザーが認証リクエストを拒否する

ステップ 7: フロー完了後に Auth0 がユーザーの応答を受信する
/token エンドポイントからの応答を受信するとポーリングを終了します。CIBA フローでは常に、認可を行うユーザーからの承認または却下のいずれかの応答が必要であり、既存のグラントは参照されません。
ステップ 8: Auth0 がアクセストークンをクライアントアプリケーションに返す
refresh_token が含まれるのは、初回の /bc-authorize リクエストに offline_access スコープが含まれている場合のみです。