メインコンテンツへスキップ
Auth0は、ユニバーサルログインを使用した組み込みの登録と認証フローを提供します。ただし、独自のインターフェイスを作成したい場合は、MFA APIを使用することもできます。

前提条件

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

OTPで登録する

MFAトークンを取得する

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

Authenticatorを登録する

ユーザーの鑑別工具を登録するには、MFA Associateエンドポイントに POST要求を送信します。このエンドポイントに必要なベアラートークンは、前の手順で取得したMFAトークンです。 OTPで登録するには、authenticator_typesパラメーターを[otp]に設定します。
curl --request POST \
  --url 'https://{yourDomain}/mfa/associate' \
  --header 'authorization: Bearer MFA_TOKEN' \
  --header 'content-type: application/json' \
  --data '{ "authenticator_types": ["otp"] }'
成功すると、次のような応答を受け取ります:
{
  "authenticator_type": "otp",
  "secret": "EN...S",
  "barcode_uri": "otpauth://totp/tenant:user?secret=...&issuer=tenant&algorithm=SHA1&digits=6&period=30",
  "recovery_codes": [ "N3B...XC"]
}
User is already enrolled(ユーザーは登録済みです)」というエラーメッセージを受け取った場合、そのユーザーはすでにMFA要素を登録済みです。このユーザーに対して別の要素を関連付ける前に、既存の要素を使ってユーザーにチャレンジする必要があります。 ユーザーが鑑別工具を初めて関連付けている場合は、応答にrecovery_codesが含まれます。復旧コードは、ユーザーが第二の認証要素であるアカウントやデバイスにアクセスできなくなったときに、ユーザーのアカウントにアクセスするために使用されます。このコードは1回しか使用できず、必要に応じて新しいコードが生成されます。

OTPの登録を確定する

登録を確定するには、エンドユーザーが、前のステップでGoogle AuthenticatorのようなOTP生成アプリケーションから取得したシークレットを入力する必要があります。このシークレットは、barcode_uriを使ってQRコードをスキャンするか、OTPアプリケーションで手動でシークレットコードを入力します。QRコードをスキャンできない場合(たとえば、モバイルデバイスから登録している、デスクトップ用OTPアプリケーションを使用しているなど)に備えて、シークレットをテキストで取得する方法を提供する必要があります。 ユーザーがシークレットを入力したら、OTPアプリケーションが6桁のコードを表示し、これをユーザーがアプリケーションに入力します。そうすると、アプリケーションはPOST要求をトークンエンドポイントに対して実行し、これにotp値を含めます。
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-otp \
  --data 'client_id={yourClientId}' \
  --data 'mfa_token={mfaToken}' \
  --data 'client_secret={yourClientSecret}' \
  --data 'otp={userOtpCode}'
呼び出しが成功すると、アクセストークンを含む応答が以下のフォーマットで返されます。
{
  "id_token": "eyJ...i",
  "access_token": "eyJ...i",
  "expires_in": 600,
  "scope": "openid profile",
  "token_type": "Bearer"
}
この時点でAuthenticatorは完全に関連付けられ、利用可能な状態で、ユーザー用の認証トークンを取得します。 MFA Authenticatorエンドポイントを呼び出すことで、Authenticatorが確認されているかどうかをいつでも検証できます。Authenticatorが確認されている場合、activeに返される値はtrueです。

OTPを使ってチャレンジする

MFAトークンを取得する

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

登録されているAuthenticatorを取得する

登録された全Authenticatorの一覧は、MFA Authenticatorエンドポイントを使って表示できます:
curl --request GET \
  --url 'https://{yourDomain}/mfa/authenticators' \
  --header 'authorization: Bearer MFA_TOKEN' \
  --header 'content-type: application/json'
以下の形式でAuthenticatorのリストを取得できます。
[
    {
        "id": "recovery-code|dev_qpOkGUOxBpw6R16t",
        "authenticator_type": "recovery-code",
        "active": true
    },
    {
        "id": "totp|dev_6NWz8awwC8brh2dN",
        "authenticator_type": "otp",
        "active": true
    }
]

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

ユーザーがワンタイムパスワードを収集すると、こちら側でそれを収集します。 OAuth0トークンエンドポイントを使用して、otpパラメーターにワンタイムパスワードを指定し、コードを検証して認証トークンを取得します。
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-otp \
  --data 'client_id={yourClientId}' \
  --data 'client_secret={yourClientSecret}' \
  --data 'mfa_token={mfaToken}' \
  --data 'otp={userOtpCode}'
呼び出しが成功すると、アクセストークンを含む応答が以下のフォーマットで返されます:
{
  "id_token": "eyJ...i",
  "access_token": "eyJ...i",
  "expires_in": 600,
  "scope": "openid profile",
  "token_type": "Bearer"
}

もっと詳しく

I