前提条件
- Auth0 Dashboard または Management API を使用して、認証要素として Push を設定 します。
プッシュ通知を登録
MFA トークンを取得する
- 認証中に登録する場合は、Authenticate With Resource Owner Password Grant and MFA を参照してください。
- ユーザーが任意のタイミングで認証要素を登録できるようにする場合は、Manage MFA Factor Enrollments を参照してください。
認証要素を登録する
POST リクエストを送信します。このエンドポイントで必要な Bearer トークンは、前の手順で取得した MFA トークンです。
Push で登録するには、authenticator_types パラメーターを [oob] に、oob_channels パラメーターを [auth0] に設定します。
成功すると、次のようなレスポンスを受け取ります。
User is already enrolled エラーが返された場合、そのユーザーにはすでに MFA 要素が登録されています。別の要素をユーザーに関連付ける前に、既存の要素を使用してユーザーにチャレンジを行う必要があります。
これがユーザーにとって認証手段を関連付ける初回である場合、レスポンスに recovery_codes が含まれていることがわかります。リカバリー code は、第 2 要素認証に使用しているアカウントまたはデバイスにアクセスできなくなった場合に、ユーザーのアカウントへアクセスするために使用されます。これらは 1 回限り使用可能な code であり、必要に応じて新しいものが生成されます。
プッシュ登録を確認する
barcode_uri の QR コードをスキャンする必要があります。
これが完了すると、Guardian アプリケーションはユーザーの登録が正常に完了したことを Auth0 に通知します。実際に完了したかどうかを確認するには、MFA Associate エンドポイントの呼び出しで返された oob_code を使用して、Auth0 のをポーリングします。
ユーザーが code をスキャンしていない場合は、authorization_pending レスポンスが返されます。これは、数秒後に再度 oauth_token を呼び出す必要があることを示します。
active で返される値は true です。
プッシュ通知によるチャレンジ
MFAトークンを取得する
MFAトークンを取得するには、リソースオーナーパスワードグラントとMFAを使用した認証で説明されている手順に従います。登録済み認証手段を取得
authenticator_id が必要です。MFA Authenticators エンドポイントを使用すると、登録済みの認証手段をすべて一覧取得できます。
次の形式で認証手段の一覧が返されます。
プッシュでユーザーにチャレンジする
authenticator_idとmfa_tokenを使用して、MFA Challenge エンドポイントにPOSTします。
受信した code で認証を完了する
| 結果 | 説明 |
|---|---|
authorization_pending | エラー: チャレンジがまだ承認または拒否されていない場合。 |
slow_down | エラー: ポーリングの頻度が高すぎる場合。 |
access_token and refresh_token | チャレンジが承認された場合。この時点でポーリングを停止してください。 |
invalid_grant | エラー: チャレンジが拒否された場合。この時点でポーリングを停止してください。 |
MFA をカスタマイズする
oauth/token エンドポイントでの認証中に、レスポンスは mfa_required エラーを返します。このエラーには、MFA API で使用する mfa_token と、認証要素の一覧を含む mfa_requirements パラメーターが含まれます。
mfa_token を使用して mfa/authenticator エンドポイントを呼び出し、ユーザーが登録済みのすべての要素の一覧を取得して、アプリケーションでサポートしている同じ種類のものと照合します。チャレンジを発行するには、対応する authenticator_type も取得する必要があります。
request/mfa/challenge エンドポイントを呼び出して、MFA チャレンジを必須にします。
Auth0 Actions を使用すると、MFA フローをさらにカスタマイズできます。詳しくは、Actions Triggers: post-challenge - API Object を参照してください。