Bonnes pratiques concernant les formulaires OTP envoyés par SMS

Découvrez comment optimiser votre formulaire OTP envoyé par SMS et améliorer l'expérience utilisateur.

Demander à un utilisateur de fournir le mot de passe à usage unique (OTP, OTP) envoyé par SMS est une pratique courante moyen de confirmer le numéro de téléphone d'un utilisateur. Voici quelques cas d'utilisation de l'OTP par SMS:

  • Authentification à deux facteurs. En plus du nom d'utilisateur et du mot de passe, l'OTP par SMS peut être sert de signal fort indiquant que le compte appartient à la personne qui a reçu le Mot de passe à usage unique envoyé par SMS.
  • Validation du numéro de téléphone. Certains services utilisent un numéro de téléphone identifiant principal. Avec ces services, les utilisateurs peuvent saisir leur numéro de téléphone et le Mot de passe à usage unique reçu par SMS pour prouver son identité. Parfois, il est associé à un code pour constituer une authentification à deux facteurs.
  • Récupération de compte. Lorsqu'un utilisateur perd l'accès à son compte, est un moyen de le récupérer. en envoyant un e-mail à leur adresse e-mail enregistrée ou un SMS OTP à leur numéro de téléphone sont des méthodes courantes de récupération de compte.
  • Confirmation du paiement Dans les systèmes de paiement, certaines banques ou certaines cartes de crédit les émetteurs demandent une authentification supplémentaire de la part du payeur pour des raisons de sécurité. L’OTP par SMS est généralement utilisé à cette fin.

Cet article présente les bonnes pratiques à suivre pour créer un formulaire de récupération de mot de passe à usage unique envoyé par SMS pour l'utilisation ci-dessus. cas d'utilisation.

Checklist

Pour offrir une expérience utilisateur optimale avec l'OTP par SMS, procédez comme suit:

  • Utilisez l'élément <input> avec: <ph type="x-smartling-placeholder">
      </ph>
    • type="text"
    • inputmode="numeric"
    • autocomplete="one-time-code"
  • Indiquez @BOUND_DOMAIN #OTP_CODE sur la dernière ligne du SMS OTP.
  • Utilisez l'API WebOTP.

Utiliser l'élément <input>

L'utilisation d'un formulaire avec un élément <input> est la bonne pratique la plus importante peut suivre, car elle fonctionne dans tous les navigateurs. Même si d'autres suggestions de ce post ne fonctionne pas dans certains navigateurs, l'utilisateur pourra toujours saisir et envoyer le mot de passe à usage unique manuellement.

<form action="/verify-otp" method="POST">
  <input type="text"
         inputmode="numeric"
         autocomplete="one-time-code"
         pattern="\d{6}"
         required>
</form>

Voici quelques idées pour tirer pleinement parti d'un champ de saisie le fonctionnement du navigateur.

type="text"

Étant donné que les OTP sont généralement des nombres à cinq ou six chiffres, en utilisant type="number" pour un champ de saisie peut sembler intuitif, car il modifie la clavier numérique uniquement. Cette opération n'est pas recommandée, car le navigateur attend un champ d'entrée soit un nombre dénombrable plutôt qu'une séquence de plusieurs nombres, ce qui peut provoquer un comportement inattendu. L'utilisation de type="number" provoque des augmentations et des diminutions les boutons à afficher à côté du champ de saisie ; appuyer sur ces boutons incrémente ou décrémente le nombre et peut supprimer les zéros précédents.

Utilisez type="text" à la place. Le clavier mobile ne sera pas converti en chiffres mais ce n'est pas un problème, car le prochain conseil d'utilisation de inputmode="numeric" ce travail.

inputmode="numeric"

Utiliser inputmode="numeric" pour remplacer le clavier de l'appareil mobile par des chiffres uniquement.

Certains sites Web utilisent type="tel" pour les champs de saisie OTP, car il remplace le clavier mobile par des chiffres uniquement (y compris * et #) lorsque concentré. Ce piratage a déjà été utilisé lorsque inputmode="numeric" n'était pas largement accepté. Depuis que Firefox a commencé à prendre en charge inputmode="numeric", il n'est pas nécessaire d'utiliser le hack type="tel" sémantiquement incorrect.

autocomplete="one-time-code"

autocomplete permet aux développeurs de spécifier l'autorisation que le navigateur doit fournir une assistance à la saisie semi-automatique et informe le navigateur de la le type d'information attendu sur le champ.

Avec autocomplete="one-time-code", chaque fois qu'un utilisateur reçoit un SMS alors qu'un formulaire est ouvert, le système d'exploitation analysera l'OTP dans le SMS de manière heuristique et le clavier suggère à l'utilisateur l'OTP à saisir. Elle ne fonctionne que sur Safari 12 et plus tard sur iOS, iPadOS et macOS, mais nous vous recommandons vivement de l'utiliser, car il s'agit un moyen simple d'améliorer l'expérience de l'OTP par SMS sur ces plateformes.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">.
`complete="one-time-code"` en action.

autocomplete="one-time-code" améliore l'expérience utilisateur, mais vous n'allez pas en revenir en vérifiant que le message SMS est conforme aux exigences format.

Mettre en forme le texte du SMS

Améliorez l'expérience utilisateur lors de la saisie d'un mot de passe à usage unique en vous alignant sur Les codes à usage unique liés à l'origine envoyés par SMS spécifique.

La règle de mise en forme est simple: terminez le SMS avec le domaine du destinataire précédé de @ et le mot de passe à usage unique précédé de #.

Exemple :

Your OTP is 123456

@web-otp.glitch.me #123456

L'utilisation d'un format standard pour les messages OTP facilite l'extraction de codes qu'ils fournissent plus facilement et plus fiable. Associer des codes OTP à sites Web rend plus difficile d’inciter les utilisateurs à fournir un code à des sites malveillants.

Ce format présente plusieurs avantages:

  • L'OTP sera lié au domaine. Si l'utilisateur se trouve sur un domaine autre que celle indiquée dans le SMS, la suggestion de mot de passe à usage unique n'apparaîtra pas. Cela réduit également le risque d'attaques par hameçonnage et de piratages de comptes potentiels.
  • Le navigateur pourra désormais extraire l'OTP de manière fiable sans dépendre des méthodes heuristiques mystérieuses et irrégulières.

Lorsqu'un site Web utilise autocomplete="one-time-code", Safari avec iOS 14 ou version ultérieure suggère l'OTP selon les règles ci-dessus.

Ce format de SMS est également utile dans les navigateurs autres que Safari. Chrome, Opera, et Vivaldi sur Android sont également compatibles avec la règle des codes à usage unique liés à l'origine avec l'API WebOTP, mais pas via autocomplete="one-time-code".

Utiliser l'API WebOTP

L'API WebOTP permet d'accéder à l'OTP reçu par SMS. En appelant navigator.credentials.get() de type otp (OTPCredential), où transport inclut sms, le site Web ; attendra qu'un SMS conforme aux codes à usage unique liés à l'origine et accordé l'accès par l'utilisateur. Une fois l'OTP transmis en JavaScript, le site web peut l'utiliser dans un formulaire ou le publier directement sur le serveur.

navigator.credentials.get({
  otp: {transport:['sms']}
})
.then(otp => input.value = otp.code);
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
. L'API WebOTP en action.

Découvrez comment utiliser l'API WebOTP en détail dans Valider des numéros de téléphone sur le Web avec l'API WebOTP ou copiez et collez l'extrait suivant. (Marque assurez-vous que les attributs action et method de l'élément <form> sont correctement définis.)

// Feature detection
if ('OTPCredential' in window) {
  window.addEventListener('DOMContentLoaded', e => {
    const input = document.querySelector('input[autocomplete="one-time-code"]');
    if (!input) return;
    // Cancel the WebOTP API if the form is submitted manually.
    const ac = new AbortController();
    const form = input.closest('form');
    if (form) {
      form.addEventListener('submit', e => {
        // Cancel the WebOTP API.
        ac.abort();
      });
    }
    // Invoke the WebOTP API
    navigator.credentials.get({
      otp: { transport:['sms'] },
      signal: ac.signal
    }).then(otp => {
      input.value = otp.code;
      // Automatically submit the form when an OTP is obtained.
      if (form) form.submit();
    }).catch(err => {
      console.log(err);
    });
  });
}

Photo de Jason Leung prise le Unsplash.