Telefonnummern im Web mit der WebOTP API bestätigen

Nutzern mit per SMS gesendeten OTPs helfen

Was ist die WebOTP API?

Heutzutage besitzen die meisten Menschen weltweit ein Mobilgerät. häufig Telefonnummern als Kennung für die Nutzer der Dienste verwenden.

Es gibt verschiedene Möglichkeiten, Telefonnummern zu bestätigen. das per SMS gesendete Einmalpasswort (OTP) ist eines der am häufigsten verwendeten Geräte. Code wird gesendet zurück an den Server des Entwicklers zeigt die Kontrolle über die Telefonnummer.

Diese Idee wird bereits in vielen Szenarien eingesetzt, um Folgendes zu erreichen:

  • Telefonnummer als Kennung für den Nutzer. Wenn Sie sich für ein neues werden Sie auf einigen Websites nach einer Telefonnummer statt nach einer E-Mail-Adresse gefragt. verwenden Sie sie als Konto-ID.
  • Bestätigung in zwei Schritten: Bei der Anmeldung wird auf einer Website nach einem Einmalcode gefragt die per SMS zusätzlich zu einem Passwort oder einem anderen Wissensfaktor gesendet werden, Sicherheit.
  • Zahlungsbestätigung: Wenn ein Nutzer eine Zahlung ausführt, können Sie mit einem einmaligen Code, der per SMS gesendet wird, die Absicht der Person bestätigen.

Der aktuelle Prozess schafft Hürden für die Nutzenden. OTP in einer SMS finden ist umständlich, da das Kopieren und Einfügen in das Formular umständlich ist. Conversion-Raten in kritischen User Journeys. Es hat sich lange gedauert, von den größten Entwicklern weltweit. Android verfügt über eine API, die genau diese Aufgabe erfüllt. Genauso iOS und Safari:

Mit der WebOTP API kann Ihre App speziell formatierte Nachrichten empfangen, die an Ihrer App-Domain. Damit können Sie programmatisch ein OTP aus einer SMS abrufen. Nachricht senden und eine Telefonnummer für den Nutzer einfacher bestätigen.

Beispiele ansehen

Angenommen, ein Nutzer möchte seine Telefonnummer auf einer Website bestätigen. Website sendet dem Nutzer eine SMS per SMS und der Nutzer gibt das OTP über das um die Inhaberschaft der Telefonnummer zu bestätigen.

Mit der WebOTP API sind diese Schritte für den Nutzer genauso einfach wie die im Video gezeigt werden. Beim Eintreffen der Textnachricht wird am unteren Rand ein Fenster eingeblendet. und fordert den Nutzer auf, seine Telefonnummer zu bestätigen. Nachdem Sie auf die Schaltfläche Bestätigen unten auf der Seite, fügt der Browser das OTP in das Formular ein wird gesendet, ohne dass der Nutzer auf Weiter klicken muss.

Der gesamte Prozess ist im Bild unten dargestellt.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> WebOTP API-Diagramm

Probieren Sie die Demo selbst aus. Sie fragt nicht nach Ihre Telefonnummer eingeben oder eine SMS an Ihr Gerät senden, Sie können aber eine von ein anderes Gerät verwenden, indem Sie den Text aus der Demo kopieren. Das funktioniert, weil es egal, wer der Sender ist, wenn Sie die WebOTP API verwenden.

  1. Rufen Sie in Chrome 84 https://web-otp.glitch.me auf oder später auf einem Android-Gerät.
  2. Senden Sie die folgende SMS von einem anderen Telefon an Ihr Telefon.
Your OTP is: 123456.

@web-otp.glitch.me #12345

Hast du die SMS erhalten und dazu aufgefordert, den Code in das Eingabefeld einzugeben? So funktioniert die WebOTP API für Nutzer.

Die Verwendung der WebOTP API besteht aus drei Teilen:

  • Ein richtig annotiertes <input>-Tag
  • JavaScript in Ihrer Webanwendung
  • Formatierter Nachrichtentext, der per SMS gesendet wurde.

Zuerst spreche ich über das <input>-Tag.

<input>-Tags mit Anmerkungen versehen

WebOTP selbst funktioniert ohne HTML-Anmerkungen, aber für browserübergreifende empfehle ich dringend, autocomplete="one-time-code" Das <input>-Tag, in das Sie erwarten, dass der Nutzer ein OTP eingibt.

Dadurch kann Safari 14 oder höher dem Nutzer vorschlagen, das <input> automatisch auszufüllen mit einem OTP, wenn sie eine SMS in dem Format erhalten, das unter SMS-Nachricht formatieren beschrieben wird, obwohl WebOTP nicht unterstützt wird.

HTML

<form>
  <input autocomplete="one-time-code" required/>
  <input type="submit">
</form>

WebOTP API verwenden

Da WebOTP einfach ist, reicht das Kopieren und Einfügen des folgenden Codes Job. Ich erkläre Ihnen, was ohnehin passiert.

JavaScript

if ('OTPCredential' in window) {
  window.addEventListener('DOMContentLoaded', e => {
    const input = document.querySelector('input[autocomplete="one-time-code"]');
    if (!input) return;
    const ac = new AbortController();
    const form = input.closest('form');
    if (form) {
      form.addEventListener('submit', e => {
        ac.abort();
      });
    }
    navigator.credentials.get({
      otp: { transport:['sms'] },
      signal: ac.signal
    }).then(otp => {
      input.value = otp.code;
      if (form) form.submit();
    }).catch(err => {
      console.log(err);
    });
  });
}

Funktionserkennung

Die Funktionserkennung ist dieselbe wie bei vielen anderen APIs. Läuft gerade Das Ereignis DOMContentLoaded wartet, bis die DOM-Struktur abgefragt werden kann.

JavaScript

if ('OTPCredential' in window) {
  window.addEventListener('DOMContentLoaded', e => {
    const input = document.querySelector('input[autocomplete="one-time-code"]');
    if (!input) return;
    
    const form = input.closest('form');
    
  });
}

OTP verarbeiten

Die WebOTP API selbst ist einfach genug. Verwenden Sie navigator.credentials.get() um das OTP zu erhalten. WebOTP fügt dieser Methode eine neue otp-Option hinzu. Es enthält nur Eine Eigenschaft: transport, deren Wert ein Array mit dem String 'sms' sein muss.

JavaScript

    
    navigator.credentials.get({
      otp: { transport:['sms'] }
      
    }).then(otp => {
    

Dadurch wird der Berechtigungsablauf des Browsers ausgelöst, wenn eine SMS eingeht. Wenn die Berechtigung wird das zurückgegebene Promise mit einem OTPCredential-Objekt aufgelöst.

Inhalt des abgerufenen OTPCredential-Objekts

{
  code: "123456" // Obtained OTP
  type: "otp"  // `type` is always "otp"
}

Übergeben Sie als Nächstes den OTP-Wert in das Feld <input>. Formular direkt senden entfällt den Schritt, bei dem Nutzende auf eine Schaltfläche tippen müssen.

JavaScript

    
    navigator.credentials.get({
      otp: { transport:['sms'] }
      
    }).then(otp => {
      input.value = otp.code;
      if (form) form.submit();
    }).catch(err => {
      console.error(err);
    });
    

Nachricht wird abgebrochen

Falls der Nutzer manuell ein OTP eingibt und das Formular absendet, kannst du das get()-Aufruf mithilfe einer AbortController-Instanz im options-Objekt.

<ph type="x-smartling-placeholder"></ph> JavaScript

    
    const ac = new AbortController();
    
    if (form) {
      form.addEventListener('submit', e => {
        ac.abort();
      });
    }
    
    navigator.credentials.get({
      otp: { transport:['sms'] },
      signal: ac.signal
    }).then(otp => {
    

SMS formatieren

Die API selbst sollte einfach genug aussehen. Sie sollten jedoch einige Dinge beachten. bevor Sie es verwenden. Die Nachricht muss gesendet werden nach navigator.credentials.get() wird aufgerufen und muss auf dem Gerät empfangen werden wobei get() aufgerufen wurde. Schließlich muss die Mitteilung die folgenden Anforderungen erfüllen: Formatierung:

  • Die Nachricht beginnt mit einem (optionalen) für Menschen lesbaren Text, der eine Zahl zwischen vier und zehn enthält. Alphanumerischer String mit mindestens einer Zahl aus der letzten Zeile für die URL und das OTP.
  • Der Domainteil der URL der Website, die die API aufgerufen hat, muss vorangestellt werden von @.
  • Die URL muss ein Pfundzeichen ('#') gefolgt vom OTP enthalten.

Beispiel:

Your OTP is: 123456.

@www.example.com #123456

Hier einige Beispiele:

Beispiel für fehlerhaften SMS-Text Warum funktioniert das nicht?
Here is your code for @example.com #123456 @ muss das erste Zeichen der letzten Zeile sein.
Your code for @example.com is #123456 @ muss das erste Zeichen der letzten Zeile sein.
Your verification code is 123456

@example.com\t#123456
Zwischen @host und #code wird ein einzelnes Leerzeichen erwartet.
Your verification code is 123456

@example.com  #123456
Zwischen @host und #code wird ein einzelnes Leerzeichen erwartet.
Your verification code is 123456

@ftp://example.com #123456
URL-Schema kann nicht angegeben werden.
Your verification code is 123456

@https://example.com #123456
URL-Schema kann nicht angegeben werden.
Your verification code is 123456

@example.com:8080 #123456
Port kann nicht angegeben werden.
Your verification code is 123456

@example.com/foobar #123456
Pfad kann nicht angegeben werden.
Your verification code is 123456

@example .com #123456
Keine Leerzeichen in der Domain
Your verification code is 123456

@domain-forbiden-chars-#%/:<>?@[] #123456
Keine unzulässigen Zeichen in der Domain
@example.com #123456

Mambo Jumbo
@host und #code sollten die letzte Zeile sein.
@example.com #123456

App hash #oudf08lkjsdf834
@host und #code sollten die letzte Zeile sein.
Your verification code is 123456

@example.com 123456
#“ fehlt.
Your verification code is 123456

example.com #123456
@“ fehlt.
Hi mom, did you receive my last text @ und # fehlen.

Demos

Probiere verschiedene Botschaften in der Demo aus: https://web-otp.glitch.me

Sie können ihn auch verzweigen und Ihre Version erstellen: https://glitch.com/edit/#!/web-otp.

WebOTP über einen ursprungsübergreifenden iFrame verwenden

Die Eingabe eines SMS-OTP in einen ursprungsübergreifenden iFrame wird normalerweise für Zahlungen verwendet insbesondere bei 3D Secure. Ein gemeinsames Format für liefert die WebOTP API OTPs, die an verschachtelte Ursprünge gebunden sind. Beispiel:

  • Ein Nutzer besucht shop.example, um mit einer Kreditkarte ein Paar Schuhe zu kaufen.
  • Nach Eingabe der Kreditkartennummer zeigt der integrierte Zahlungsanbieter eine von bank.example in einem iFrame, in dem der Nutzer aufgefordert wird, seine um schnell bezahlen zu können.
  • bank.example sendet dem Nutzer eine SMS mit einem OTP, damit er um ihre Identität zu bestätigen.

Wenn Sie die WebOTP API in einem ursprungsübergreifenden iFrame verwenden möchten, müssen Sie zwei Schritte ausführen:

  • Im SMS-Text sowohl den Ursprung des Top-Frames als auch den iFrame-Ursprung annotieren angezeigt.
  • Berechtigungsrichtlinie so konfigurieren, dass der ursprungsübergreifende iFrame das OTP empfangen kann direkt von den Nutzenden.
<ph type="x-smartling-placeholder">
</ph>
. WebOTP API in einem iFrame in Aktion.

Sie können die Demo unter folgendem Link ausprobieren: https://web-otp-iframe-demo.stackblitz.io.

bound-Ursprung in der SMS-Textnachricht annotieren

Wenn die WebOTP API aus einem iFrame aufgerufen wird, muss die SMS-Textnachricht den Top-Frame-Ursprung mit vorangestelltem @ gefolgt von dem OTP mit vorangestelltem # einschließen und dem iFrame-Ursprung in der letzten Zeile @ vorangestellt.

Your verification code is 123456

@shop.example #123456 @bank.exmple

Berechtigungsrichtlinie konfigurieren

Um WebOTP in einem ursprungsübergreifenden iFrame zu verwenden, muss der Einbettungscode Zugriff darauf gewähren API über die Berechtigungsrichtlinie „otp-credentials“, um unbeabsichtigte Eingaben zu vermeiden verhalten. Im Allgemeinen gibt es zwei Möglichkeiten, dieses Ziel zu erreichen:

über HTTP-Header:

Permissions-Policy: otp-credentials=(self "https://bank.example")

über das iFrame-Attribut allow:

<iframe src="https://bank.example/…" allow="otp-credentials"></iframe>

Weitere Beispiele zum Angeben einer Berechtigungsrichtlinie

WebOTP auf dem Computer verwenden

In Chrome unterstützt WebOTP das Abhören von SMS, die auf anderen Geräten empfangen wurden, um Nutzern bei der Bestätigung der Telefonnummer auf dem Computer helfen.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> WebOTP API auf dem Desktop.

Dafür muss sich der Nutzer auf beiden Geräten im selben Google-Konto anmelden. Chrome für Computer und Chrome für Android.

Entwickler müssen lediglich die WebOTP API auf ihrer Desktop-Website implementieren, wie auf ihrer mobilen Website, aber es gibt keine besonderen Tricks. erforderlich.

Weitere Informationen finden Sie im Hilfeartikel Telefonnummer auf dem Computer mit der WebOTP API bestätigen.

FAQ

Das Dialogfeld wird nicht angezeigt, obwohl ich eine korrekt formatierte Nachricht sende. Woran liegt das?

Beim Testen der API gibt es einige Einschränkungen:

  • Wenn die Telefonnummer des Absenders in der Kontaktliste des Empfängers enthalten ist, Die API wird aufgrund des Designs der zugrunde liegenden SMS User Consent API nicht ausgelöst.
  • Wenn Sie ein Arbeitsprofil auf Ihrem Android-Gerät verwenden und das WebOTP nicht funktionieren, versuchen Sie, Chrome in Ihrem privaten Profil zu installieren und zu verwenden d.h. demselben Profil, über das Sie SMS empfangen.

Überprüfen Sie im Format, ob Ihre SMS richtig formatiert ist.

Ist diese API zwischen verschiedenen Browsern kompatibel?

Chromium und WebKit haben sich auf das SMS-Format geeinigt und Apple unterstützt Safari ab iOS 14 und macOS Big Sur. Obwohl Safari die WebOTP JavaScript API nicht unterstützt, input-Element mit autocomplete=["one-time-code"], der Standardeinstellung, annotieren Tastatur schlägt automatisch vor, dass Sie das OTP eingeben, wenn die SMS-Nachricht den Anforderungen entspricht. mit dem Format.

Ist es sicher, SMS zur Authentifizierung zu verwenden?

Das OTP per SMS ist nützlich, um eine Telefonnummer zu bestätigen, wenn diese an erster Stelle steht. angegeben ist, muss die Bestätigung der Telefonnummer per SMS vorsichtig für die Erneute Authentifizierung, da Telefonnummern von den Mobilfunkanbietern gehackt und wiederverwendet werden können. WebOTP ist ein bequemer Mechanismus zur erneuten Authentifizierung und Wiederherstellung, aber Dienste sollten kombinieren Sie sie mit zusätzlichen Faktoren, wie z. B. einer Wissensherausforderung, oder verwenden Sie Web Authentication API für eine starke Authentifizierung.

Wo kann ich Fehler bei der Chrome-Implementierung melden?

Haben Sie bei der Implementierung von Chrome einen Fehler gefunden?

  • Fehler melden unter https://new.crbug.com. Gib so viele Details wie möglich, einfache Anweisungen zum Reproduzieren Setzen Sie Components auf Blink>WebOTP.

Wie kann ich bei dieser Funktion helfen?

Möchten Sie die WebOTP API verwenden? Ihre öffentliche Unterstützung hilft uns, und zeigt anderen Browseranbietern, wie wichtig es ist, sie zu unterstützen. Sende einen Tweet mit dem Hashtag an @ChromiumDev #WebOTP und teilen Sie uns mit, wo und wie Sie sie nutzen.

Ressourcen