/passwordless/start を使用していた場合は、既存のデータベース接続に統合できます。Universal Login でパスワードレス認証を使用する方法については、データベース接続のパスワードレス認証を参照してください。
Passwordless OTP グラントは、シングルページアプリケーション (SPA) タイプのアプリケーションでは利用できません。フロントエンドがシングルページアプリケーションの場合は、Passwordless OTP グラントを有効にしたバックエンドアプリケーションから
/otp/challenge と /oauth/token を呼び出してください。POST /otp/challenge— ユーザーのメールアドレスまたは電話番号にワンタイムコードを送信します。POST /oauth/token— ユーザーが入力したコードをトークンと交換します。
仕組み
- ユーザーがアプリケーションでメールアドレスまたは電話番号を入力します。
- アプリケーションが
POST /otp/challengeエンドポイントを呼び出します。 - Auth0 Authorization Serverが、ユーザーのメールアドレスまたは電話番号宛てにワンタイムコードを送信します。
- Auth0 Authorization Serverが
auth_session値を返します。この値を保存してください。ほかにstateを保持する必要はありません。 - ユーザーがコードを受け取り、アプリケーションのUIに入力します。
- アプリケーションが
auth_sessionとユーザーが入力したコードを指定して、POST /oauth/tokenエンドポイントを呼び出します。 - Auth0 Authorization Serverが
auth_sessionに対してコードを検証し、ID トークンとアクセストークン (必要に応じてリフレッシュトークンも) を返します。
auth_session文字列だけです。リクエストがログインかサインアップか、またMFAが必要かどうかはAuth0が判断するため、それらを自分で管理する必要はありません。詳細については、Auth0がログインとサインアップを判断する方法をお読みください。
開始前に
- データベース接続で、認証方法として
email_otpおよび/またはphone_otpを設定します。詳細については、データベース接続でのパスワードレス認証をお読みください。 - 暗黙的なサインアップフローでユーザーがサインアップできるようにする場合は、サインアップ時のOTP検証を有効にします。詳細については、データベース接続でのパスワードレス認証をお読みください。
- Auth0 DashboardまたはManagement APIでPasswordless OTPグラントを有効にします。詳細については、グラントタイプの更新をお読みください。
- バックエンドWebアプリケーションなどの機密アプリケーションは、両方の呼び出しで
client_secretを送信する必要があります。ネイティブアプリケーションなどのパブリッククライアントでは必要ありません。 - 音声OTPを使用するには、音声を配信チャネルとして使用できるよう、Unified Phone Experienceを有効にします。
OTP チャレンジを開始する
auth_session を返します。
パラメータ
フィールド名 (
email または phone_number) によって、Auth0 が使用するチャネルが決まります。識別子の type を別途送信する必要はありません。
レスポンス
/otp/challenge は、ユーザーが存在するかどうかにかかわらず 200 OK を返します。これにより、ユーザー列挙を防止します。攻撃者はこのエンドポイントを利用して、どの識別子にアカウントが存在するかを特定できません。auth_session は不透明な文字列として扱い、保存したうえで変更せずに次の呼び出しに渡してください。
コードをトークンに交換する
auth_sessionとともに送信します。
パラメータ
レスポンス
暗黙的なサインアップ
allow_signup: false により既存のユーザーのみを認証します。POST /otp/challenge に allow_signup: true を指定すると、ユーザーがまだ存在せず、接続でサインアップが有効になっている場合、OTP の検証に成功した時点でアカウントを作成できます。
allow_signup: false: Auth0 がユーザーを作成することはありません。未知の識別子はトークン交換時に失敗します。allow_signup: true: ユーザーが存在せず、接続でサインアップが許可されている場合、OTP の検証時にアカウントが作成され、同じステップでトークンが発行されます。
Auth0 によるログインとサインアップの判別方法
auth_session に記録します。トークン交換時に、Auth0 はセッションを参照して適切な処理を行います。
ブロックされている場合は、意図的に誤った OTP の場合と同じエラーが返されるため、レスポンスからアカウントの存在有無が明らかになることはありません。
多要素認証
POST /oauth/token は mfa_required エラーを含む 403 を返します。
mfa_token を使用して MFA API を呼び出し、追加の認証要素に対するチャレンジと検証を行います。この動作は、他のすべての Auth0 グラントタイプにおける MFA の動作と同じです。
エラー応答
error コードと人間が読み取れる error_description が含まれます。パラメータのバリデーションに失敗した場合 (400) には、該当するフィールドを特定する validation_errors 配列も含まれます。
POST /otp/challenge
POST /oauth/token
レート制限
POST /otp/challenge は、グローバルなAuthentication API のレート制限に加え、IP アドレスごとに 1 時間あたり 50 リクエストに制限されています。制限を超えると、429 Too Many Requests が返されます。
レート制限が適用されたレスポンスには、次のヘッダーが含まれます。
制限事項
- シングルページアプリケーション (SPA) ではPasswordless OTPグラントを有効にできないため、これらのエンドポイントを直接使用することはできません。有効なグラントを持つバックエンドアプリケーション経由で呼び出してください。
- 機密アプリケーションは、両方の呼び出しで
client_secretを送信する必要があります。 - Authentication API は、メールまたは電話のOTPが設定されたデータベース接続に対して認証を行います。メールまたはSMS専用のパスワードレス接続において、
/passwordless/startの代替となるものではありません。