メインコンテンツへスキップ
Auth0 では、Universal Login を使用した組み込みの の登録および認証フローを提供しています。ただし、独自のユーザーインターフェースを作成する場合は、MFA API を使用してこれを実現できます。 MFA API を使用すると、Guardian アプリケーションまたは SDK により、プッシュ通知を使ってユーザーを登録し、チャレンジできます。

前提条件

MFA API を使用する前に、アプリケーションで MFA のグラントタイプを有効にする必要があります。Auth0 Dashboard > Applications > Advanced Settings > Grant Types に移動し、MFA を選択します。

プッシュ通知を登録

MFA トークンを取得する

登録を開始するタイミングに応じて、MFA API の使用に必要な は、次のいずれかの方法で取得できます。

認証要素を登録する

ユーザーの認証要素を登録するには、MFA Associate エンドポイントに POST リクエストを送信します。このエンドポイントで必要な Bearer トークンは、前の手順で取得した MFA トークンです。 Push で登録するには、authenticator_types パラメーターを [oob] に、oob_channels パラメーターを [auth0] に設定します。 成功すると、次のようなレスポンスを受け取ります。
{
    "authenticator_type": "oob",
    "barcode_uri": "otpauth://totp/tenant:user?enrollment_tx_id=qfjn2eiNYSjU3xID7dBYeCBSrdREWJPY&base_url=tenan",
    "recovery_codes": [
        "ALKE6EJZ4853BJYLM2DM2WU7"
    ],
    "oob_channel": "auth0",
    "oob_code": "Fe26.2...SYAg"
}
User is already enrolled エラーが返された場合、そのユーザーにはすでに MFA 要素が登録されています。別の要素をユーザーに関連付ける前に、既存の要素を使用してユーザーにチャレンジを行う必要があります。 これがユーザーにとって認証手段を関連付ける初回である場合、レスポンスに recovery_codes が含まれていることがわかります。リカバリー code は、第 2 要素認証に使用しているアカウントまたはデバイスにアクセスできなくなった場合に、ユーザーのアカウントへアクセスするために使用されます。これらは 1 回限り使用可能な code であり、必要に応じて新しいものが生成されます。

プッシュ登録を確認する

登録を確認するには、エンドユーザーは 5 分以内に、Guardian アプリケーションで barcode_uri の QR コードをスキャンする必要があります。 これが完了すると、Guardian アプリケーションはユーザーの登録が正常に完了したことを Auth0 に通知します。実際に完了したかどうかを確認するには、MFA Associate エンドポイントの呼び出しで返された oob_code を使用して、Auth0 のをポーリングします。 ユーザーが code をスキャンしていない場合は、authorization_pending レスポンスが返されます。これは、数秒後に再度 oauth_token を呼び出す必要があることを示します。
{
    "error": "authorization_pending",
    "error_description": "Authorization pending: please repeat the request in a few seconds."
}
リクエストが成功すると、アクセストークンを含む次の形式のレスポンスが返されます。
{
  "id_token": "eyJ...i",
  "access_token": "eyJ...i",
  "expires_in": 600,
  "scope": "openid profile",
  "token_type": "Bearer"
}
この時点で、認証器の関連付けは完了しており、使用できる状態です。また、ユーザーの認証トークンも取得できています。 認証器が確認済みかどうかは、いつでも MFA Authenticators エンドポイントを呼び出して確認できます。認証器が確認済みの場合、active で返される値は true です。

プッシュ通知によるチャレンジ

MFAトークンを取得する

MFAトークンを取得するには、リソースオーナーパスワードグラントとMFAを使用した認証で説明されている手順に従います。

登録済み認証手段を取得

ユーザーにチャレンジを送信するには、チャレンジ対象の要素に対応する authenticator_id が必要です。MFA Authenticators エンドポイントを使用すると、登録済みの認証手段をすべて一覧取得できます。 次の形式で認証手段の一覧が返されます。
[
    {
        "id": "recovery-code|dev_Ahb2Tb0ujX3w7ilC",
        "authenticator_type": "recovery-code",
        "active": true
    },
    {
        "id": "push|dev_ZUla9SQ6tAIHSz6y",
        "authenticator_type": "oob",
        "active": true,
        "oob_channel": "auth0",
        "name": "user's device name"
    },
    {
        "id": "totp|dev_gJ6Y6vpSrjnKeT67",
        "authenticator_type": "otp",
        "active": true
    }
]
ユーザーが push で登録すると、OTP にも登録されます。これは、ユーザーが接続できない状況でも Guardian が OTP によるチャレンジ をサポートしているためです。

プッシュでユーザーにチャレンジする

プッシュチャレンジを開始するには、対応するauthenticator_idmfa_tokenを使用して、MFA Challenge エンドポイントにPOSTします。

受信した code で認証を完了する

成功した場合、次のレスポンスが返されます。
{
    "challenge_type": "oob",
    "oob_code": "Fe26...jGco"
}
アプリケーションは、ユーザーがプッシュ通知を承認するまで、OAuth0 Token エンドポイントをポーリングし続ける必要があります。 この呼び出しでは、次のいずれかの結果が返される場合があります。
結果説明
authorization_pendingエラー: チャレンジがまだ承認または拒否されていない場合。
slow_downエラー: ポーリングの頻度が高すぎる場合。
access_token and refresh_tokenチャレンジが承認された場合。この時点でポーリングを停止してください。
invalid_grantエラー: チャレンジが拒否された場合。この時点でポーリングを停止してください。

MFA をカスタマイズする

Resource Owner Password Grant、Embedded、または Refresh Token フローでのカスタマイズ可能な MFA は EA です。この機能を使用すると、Okta のMaster Subscription Agreement に記載された該当する Free Trial 条項に同意したものとみなされます。Auth0 のリリースステージの詳細については、Product Release Stages を参照してください。EA への参加を希望する場合は、Auth0 Support までお問い合わせください。
カスタマイズ可能な MFA では、ユーザーはアプリケーションでサポートされている任意の認証要素を選んで登録し、チャレンジできます。 oauth/token エンドポイントでの認証中に、レスポンスは mfa_required エラーを返します。このエラーには、MFA API で使用する mfa_token と、認証要素の一覧を含む mfa_requirements パラメーターが含まれます。
{
  "error": "mfa_required",
  "error_description": "Multifactor authentication required",
  "mfa_token": "Fe26...Ha",
  "mfa_requirements": {
    "challenge": [
      { "type": "otp" },
      { "type": "push-notification" },
      { "type": "phone" },
      { "type": "recovery-code" }
      { "type": "email"} //チャレンジでのみ使用可能
    ]
  }
}
mfa_token を使用して mfa/authenticator エンドポイントを呼び出し、ユーザーが登録済みのすべての要素の一覧を取得して、アプリケーションでサポートしている同じ種類のものと照合します。チャレンジを発行するには、対応する authenticator_type も取得する必要があります。
[
  {
    "type": "recovery-code",
    "id": "recovery-code|dev_qpOkGUOxBpw6R16t",
    "authenticator_type": "recovery-code",
    "active": true
  },
  {
    "type": "otp",
    "id": "totp|dev_6NWz8awwC8brh2dN",
    "authenticator_type": "otp",
    "active": true
  }
]
request/mfa/challenge エンドポイントを呼び出して、MFA チャレンジを必須にします。 Auth0 Actions を使用すると、MFA フローをさらにカスタマイズできます。詳しくは、Actions Triggers: post-challenge - API Object を参照してください。

詳細