メインコンテンツへスキップ
Auth0 では、Universal Login を使用した組み込みの の登録および認証フローを利用できます。ただし、独自のユーザーインターフェースを作成する場合は、MFA API を使用して実現できます。

前提条件

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

SMS または音声で登録する

MFAトークンを取得する

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

認証要素を登録

ユーザーの認証要素を登録するには、MFA Associate エンドポイントに POST リクエストを送信します。このエンドポイントで必要な bearer token は、前の手順で取得した MFA トークンです。 SMS または音声で登録するには、SMS または音声のいずれかでチャレンジできる電話番号を登録します。エンドポイントを呼び出すには、以下のパラメーターを指定します。oob_channels パラメーターは、ユーザーに code を送信する方法 (SMS または音声) を示します。
パラメーター
authentication_types[oob]
oob_channels[sms] または [voice]
phone_number+11...9E.164 形式 の電話番号
成功すると、次のようなレスポンスが返されます:
{
  "authenticator_type": "oob",
  "binding_method": "prompt",
  "recovery_codes": [ "N3BGPZZWJ85JLCNPZBDW6QXC" ],
  "oob_channel": "sms",
  "oob_code": "ata6daXAiOi..."
}
`
User is already enrolled エラーが表示された場合、そのユーザーにはすでに MFA 要素が登録されています。ユーザーに別の要素を関連付ける前に、既存の要素を使ってユーザーにチャレンジする必要があります。 これがユーザーにとって認証要素を関連付ける初回の操作である場合、レスポンスに recovery_codes が含まれていることがわかります。リカバリーコードは、第 2 要素認証に使用しているアカウントまたはデバイスにアクセスできなくなった場合に、ユーザーが自分のアカウントへアクセスするために使用されます。これらは 1 回限り使用できる code であり、必要に応じて新しいものが生成されます。

SMS または音声による登録の確認

ユーザーには 6 桁の code を含むメッセージが届き、その値をアプリケーションに入力する必要があります。 登録を完了するには、POST リクエストを送信します。前のレスポンスで返された oob_code と、メッセージで受信した値を binding_code に含める必要があります。 リクエストが成功すると、アクセストークンを含む次の形式のレスポンスが返されます。
{
  "id_token": "eyJ...i",
  "access_token": "eyJ...i",
  "expires_in": 600,
  "scope": "openid profile",
  "token_type": "Bearer"
}

SMS または音声によるチャレンジ

MFAトークンを取得する

MFA を使用した Resource Owner Password Grant による認証で説明されている手順に従って、MFAトークンを取得します。

登録済み認証要素を取得する

ユーザーにチャレンジするには、チャレンジ対象の要素の authenticator_id が必要です。MFA Authenticators エンドポイントを使用すると、登録済みの認証要素をすべて一覧できます。 次の形式で認証要素の一覧が返されます。
[
    {
        "id": "recovery-code|dev_O4KYL4FtcLAVRsCl",
        "authenticator_type": "recovery-code",
        "active": true
    },
    {
        "id": "sms|dev_NU1Ofuw3Cw0XCt5x",
        "authenticator_type": "oob",
        "active": true,
        "oob_channel": "sms",
        "name": "XXXXXXXX8730"
    },
        {
        "id": "voice|dev_NU1Ofuw3Cw0XCt5x",
        "authenticator_type": "oob",
        "active": true,
        "oob_channel": "voice",
        "name": "XXXXXXXX8730"
    }
]

OTP でユーザーにチャレンジを要求する

チャレンジを開始するには、対応する authenticator_idmfa_token を使用して、MFA Challenge エンドポイントに POST リクエストを送信します。

受け取ったcodeで認証を完了する

成功すると、次のレスポンスを受け取ります:
{
  "challenge_type": "oob",
  "oob_code": "asdae35fdt5...",
  "binding_method": "prompt"
}
アプリケーションでは、メッセージで送信された 6 桁の code をユーザーに入力させ、その値を binding_code パラメーターに設定する必要があります。前の呼び出しで返された binding_codeoob_code を指定して OAuth0 Token エンドポイントを使用すると、code を検証し、認証トークンを取得できます。 呼び出しが成功すると、アクセストークンを含む、以下の形式のレスポンスが返されます:
{
  "id_token": "eyJ...i",
  "access_token": "eyJ...i",
  "expires_in": 600,
  "scope": "openid profile",
  "token_type": "Bearer"
}
注: SMS の送信と無効な code の返却には、レート制限が適用されます。SMS の code は 10 回まで送信でき、1 時間に 1 回分補充されます。一方、無効な code の返却は 10 回までで、6 分ごとに 1 回分補充されます。

MFA をカスタマイズする

Resource Owner Password Grant、Embedded、またはリフレッシュトークンフローで使用するカスタマイズ可能な MFA は、早期アクセス機能です。この機能を使用することで、Okta の Master Subscription Agreement に記載されている該当する Free Trial 条項に同意したものとみなされます。Auth0 のリリースステージの詳細については、Product Release Stages を参照してください。早期アクセスへの参加を希望する場合は、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 オブジェクト を参照してください。

関連情報