メインコンテンツへスキップ
Auth0は、ユニバーサルログインを使用した組み込みの登録と認証フローを提供します。ただし、独自のインターフェイスを作成したい場合は、MFA APIを使用することもできます。 要素としてメールを有効にする場合、メールアドレスが検証されているユーザーは誰でもメールを使ってMFAを完了できます。

利用可能性はAuth0プランによって異なる

この機能が利用できるかどうかは、使用しているログイン実装とAuth0プラン(または契約)によります。詳細については、「価格設定」をお読みください。

前提条件

MFA APIを使用するには、事前にアプリケーションに対してMFAの付与タイプを有効にする必要があります。[Auth0 Dashboard]>[Applications(アプリケーション)]>[Advanced Settings(詳細設定)]>[Grant Types(付与タイプ)]に移動し、[MFA] を選択します。

メールで登録する

ユーザーがプライマリIDで検証済みのメールアドレス以外にアドレスを追加登録できるようにするには、以下の手順を完了する必要があります。

MFAトークンを取得する

登録をトリガーするタイミングによっては、以下のような方法で、MFA APIを使用するためのアクセストークンを取得できます。

Authenticatorを登録する

ユーザーの鑑別工具を登録するには、MFA Associateエンドポイントに POST要求を送信します。このエンドポイントに必要なベアラートークンは、前の手順で取得したMFAトークンです。 次のパラメーターを使用します:
パラメーター
authentication_types[oob]
oob_channels[email]
emailemail@address.com、ユーザーのメールアドレス。
curl --request POST \
  --url 'https://{yourDomain}/mfa/associate' \
  --header 'authorization: Bearer MFA_TOKEN' \
  --header 'content-type: application/json' \
  --data '{ "authenticator_types": ["oob"], "oob_channels": ["email"], "email" : "email@address.com" }'
成功すると、次のような応答を受け取ります:
{
    "authenticator_type": "oob",
    "binding_method": "prompt",
    "oob_code" : "Fe26..nWE",
    "oob_channel": "email",
    "recovery_codes": [ "N3BGPZZWJ85JLCNPZBDW6QXC" ]
  }
User is already enrolled(ユーザーは登録済みです)」というエラーメッセージを受け取った場合、そのユーザーはすでにMFA要素を登録済みです。このユーザーに対して別の要素を関連付ける前に、既存の要素を使ってユーザーにチャレンジする必要があります。 ユーザーが鑑別工具を初めて関連付けている場合は、応答にrecovery_codesが含まれます。復旧コードは、ユーザーが第二の認証要素であるアカウントやデバイスにアクセスできなくなったときに、ユーザーのアカウントにアクセスするために使用されます。このコードは1回しか使用できず、必要に応じて新しいコードが生成されます。

メールアドレスの登録を確定する

ユーザーは、アプリケーションに提供するための6桁のコードが記載されたメールを受信します。 登録を完了するには、/oath/token エンドポイントにPOST要求を行います。メールに記載された値とともに、前の応答で返されたoob_codebinding_codeを入れます。
curl --request POST \
  --url 'https://{yourDomain}/oauth/token' \
  --data grant_type=http://auth0.com/oauth/grant-type/mfa-oob \
  --data 'mfa_token={mfaToken}' \
  --data 'oob_code={oobCode}' \
  --data 'binding_code={userEmailOtpCode}' \
  --data 'client_id={yourClientId}' \
  --data 'client_secret={yourClientSecret}'
呼び出しが成功すると、アクセストークンを含む応答が以下のフォーマットで返されます。
{
  "id_token": "eyJ...i",
  "access_token": "eyJ...i",
  "expires_in": 600,
  "scope": "openid profile",
  "token_type": "Bearer"
}
この時点でAuthenticatorは完全に関連付けられ、利用可能な状態で、ユーザー用の認証トークンを取得します。 MFA Authenticatorエンドポイントを呼び出すことで、Authenticatorが確認されているかどうかをいつでも検証できます。Authenticatorが確認されている場合、activeに返される値はtrueです。 ユーザーが受信するメールをカスタマイズするオプションもあります。詳細は、「メールテンプレートをカスタマイズする」をお読みください。

メールアドレスを使ってチャレンジする

MFAトークンを取得する

「リソース所有者のパスワード付与とMFAで認証する」で説明されている手順に従ってMFAトークンを取得します。

登録されているオーセンティケーターを取得する

ユーザーにチャレンジするには、チャレンジしたい要素のauthenticator_idが必要です。登録された全Authenticatorの一覧は、MFA Authenticatorエンドポイントを使って表示できます:
curl --request GET \
  --url 'https://{yourDomain}/mfa/authenticators' \
  --header 'authorization: Bearer MFA_TOKEN' \
  --header 'content-type: application/json'

OTPを使ってユーザーにチャレンジする

メールチャレンジをトリガーするには、対応するauthenticator_idmfa_tokenを使ってMFAチャレンジエンドポイントへPOSTを送ります。
curl --request POST \
  --url 'https://{yourDomain}/mfa/challenge' \
  --data '{  "client_id": "{yourClientId}",  "client_secret": "{yourClientSecret}",  "challenge_type": "oob",  "authenticator_id": "email|dev_NU1Ofuw3Cw0XCt5x", "mfa_token": "{mfaToken}" }'

受信したコードを使って認証を完了します。

成功すると以下の応答が届きます:
{
  "challenge_type": "oob",
  "oob_code": "abcd1234...",
  "binding_method": "prompt"
}
アプリケーションがユーザーに対してコード入力画面を表示し、oauth``/tokenエンドポイントへの以下の呼び出しの中でbinding_codeパラメーターの要求の一部として送信します。
curl --request POST \
  --url 'https://{yourDomain}/oauth/token' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=http://auth0.com/oauth/grant-type/mfa-oob \
  --data 'client_id={yourClientId}' \
  --data 'client_secret={yourClientSecret}' \
  --data 'mfa_token={mfaToken}' \
  --data 'oob_code={oobCode}' \
  --data 'binding_code={userEmailOtpCode}'
呼び出しが成功すると、アクセストークンを含む応答が以下のフォーマットで返されます:
{
  "id_token": "eyJ...i",
  "access_token": "eyJ...i",
  "expires_in": 600,
  "scope": "openid profile",
  "token_type": "Bearer"
}

もっと詳しく

I