受信トレイ
開発者・QAへ戻る

難しいのは「今どのコードが有効か」

メールOTPで間違ったコードを受け入れないためのテスト方法

OTPのrequest、最新性、resend、期限切れ、replay、最終状態を明示的に検証し、受信箱の数字だけに依存しません。

読了目安 8分

同じ受信箱に複数のOTPが残ると、テストは簡単に曖昧になります。システムには、どのrequestがcodeを作ったか、いつexpireするか、resendが古いcodeを無効にするか、成功後に再利用できるかというルールがあります。これらを個別のassertionにします。

OTP stateを明示する

EventQuestionAssertion
最初のrequestどのcodeが有効か現在のcodeが仕様どおり
resend古いcodeは有効か実際のpolicyを確認
expirationいつ無効か期限切れで安全に失敗
successreplay可能かone-time policyを確認

deterministicな順序

  1. 1

    request境界を作る

    新しい宛先か明確な時間窓を使います。

  2. 2

    対応するメールを待つ

    sender、subject、recipient、timeを一致させます。

  3. 3

    現在のcodeを送る

    responseとsession/account stateを確認します。

  4. 4

    resendを別caseにする

    happy pathと混ぜません。

  5. 5

    expirationとreplayを分ける

    独立したsecurity propertyです。

retryが新しいOTPを作ることがある

PlaywrightやCypressで失敗をretryすると、setupが再実行され新しいOTPが発行される場合があります。受信箱が残ると、retry自体がstateを変えます。

attemptごとのidentityか相関情報でrequestを分離します。

メールOTPは自動的にphishing-resistantではない

NISTはemailをdevice-boundなout-of-band authenticatorとして扱っていません。one-timeであることとphishing resistanceは別の性質です。

信頼できるOTPテストはstate controlです。requestとcurrent codeを特定し、resend、expiration、replay、retryをそれぞれ明示的に検証します。

手動メールQA用のクリーンな受信先が必要ですか?

MailOnceで、個人の受信箱をテストデータとして使わずに、登録、OTP、マジックリンク、パスワード再設定、通知メールを確認できます。

使い捨てメールを作成

参考資料と追加情報

テスト指針の根拠として使用したセキュリティ資料とテストランナーの一次ドキュメントです。

次のテストへ

同じメールテスト領域にある次の境界を確認します。