HTML-Attribute für eine bessere Benutzererfahrung bei der Zwei-Faktor-Authentisierung

January 09, 2020
Autor:in:
Phil Nash
Twilion

HTML-Attribute für eine bessere Benutzererfahrung bei der Zwei-Faktor-Authentisierung


Hallo und Danke fürs Lesen! Dieser Blogpost ist eine Übersetzung von HTML attributes to improve your users' two factor authentication experience. Während wir unsere Übersetzungsprozesse verbessern, würden wir uns über Dein Feedback an help@twilio.com freuen, solltest Du etwas bemerken, was falsch übersetzt wurde. Wir bedanken uns für hilfreiche Beiträge mit Twilio Swag :)

Es gibt viele Reibungspunkte, die sich auf die Benutzererfahrung bei der Anmeldung auswirken können, vor allem bei der Eingabe eines Codes für die Zwei-Faktor-Authentisierung. Unsere Aufgabe als Entwickler ist es, Anwendungen zu erstellen, die zwar die Kontosicherheit im Auge behalten, aber nicht die Benutzererfahrung beeinträchtigen. Manchmal erscheint es einem aber fast so, als ob sich diese beiden Anforderungen ausschließen.

In diesem Blog betrachten wir uns das bescheidene <input>-Element und die HTML-Attribute, die zu einer besseren Erfahrung unserer Benutzer bei der Zwei-Faktor-Authentisierung führen können.

Die Standarderfahrung

Wenn wir eine Zwei-Faktor-Authentisierung für eine Webanwendung implementieren, vielleicht sogar mit der Authy-API für die Zwei-Faktor-Authentisierung, benötigen wir ein Formular, in das unsere Benutzer das Einmalpasswort eingeben, das wir ihnen senden. Das HTML, das wir zu diesem Zweck erstellen, könnte in etwa so aussehen:

<form action="/sessions/check-2fa" method="POST">
  <div>
    <label for="token">Please enter the code you were sent:</label>
    <input type="text" name="token" id="token" />
  </div>
  <button type="submit">Check token</button>
</form>

Das bietet dem Benutzer bereits eine gute Erfahrung. Der <input> hat einen Namen und eine eindeutige ID und das <label> verwendet das richtige for-Attribut für eine explizite Zuordnung. Das ist vor allem als Eingabehilfe wichtig. Wir könnten das <label> auch mit dem <input> umschließen, um den gleichen Effekt zu erzielen. Mit ein wenig CSS könnte das Ganze in etwa so aussehen:

Eine in iOS Safari angezeigte Webseite, auf der eine Aufforderung zur Zwei-Faktor-Authentisierung angezeigt wird. Die standardmäßige alphabetische Tastatur ist geöffnet.

Mit ein paar weiteren Attributen können wir diese Erfahrung jedoch Schritt für Schritt verbessern.

Die richtige Tastatur

Auf Mobilgeräten oder Geräten mit Bildschirmtastaturen ist das Erste, was auffällt, die Anzeige der vollständigen alphabetischen Tastatur. Einmalpasswörter setzen sich aber aus numerischen Zeichen zusammen, deshalb wäre es viel besser, dem Benutzer eine numerische Tastatur anzuzeigen.

Wir könnten uns jetzt denken, dass die Lösung hier ein einfaches Umstellen des type <input> von „text“ auf „number“ (Zahl) ist:

    <input type="number" name="token" id="token" />

Damit lägen wir aber falsch. Das löst zwar die Anzeige einer anderen Tastatur auf iOS aus, aber diese enthält immer noch eine Reihe unnötiger Tasten.

Eine in iOS Safari angezeigte Webseite, auf der eine Aufforderung zur Zwei-Faktor-Authentisierung angezeigt wird. Dieses Mal werden auf der Tastatur Zahlen und Symbole angezeigt.

Wenn wir den Feldtyp ändern, ändern wir auch die Art und Weise, wie der Browser dieses Feld interpretiert. Es könnten dabei auch Fehler auftreten: Wenn die Zwei-Faktor-Authentisierung mit einer Null beginnt, könnte ein Zahlenfeld die führende Null einfach unterschlagen.

inputmode

Das inputmode-Attribut ändert die Tastatur, die im Browser angezeigt werden soll, ohne die Bedeutung der in diesem Feld erfassten Daten zu ändern. Wir möchten, dass unser <input> eine Texteingabe erhält, die allerdings über die numerische Tastatur eingegeben wird. Deshalb fügen wir stattdessen inputmode="numeric" hinzu.

    <input type="text" name="token" id="token" inputmode="numeric" />

inputmode verfügt über eine Reihe von anderen Werten, einschließlich „tel“ für Telefonnummern, „email“, „decimal“, „url“, „search“ und „none“, falls wir unsere eigene Tastatur anzeigen lassen möchten. Dieser Artikel auf CSS-Tricks enthält alle Details zu den verschiedenen inputmodes.

Die Browserunterstützung für inputmode ist ideal für die heutigen mobilen Betriebssysteme, aber vor ein paar Jahren war das noch alles Ödland. Für ältere Browser gibt es einen weiteren Trick, um eine numerische Tastatur auszulösen und kostenlos eine zusätzliche Überprüfung hinzuzufügen.

pattern

Mit dem pattern-Attribut können wir den Inhalt eines <input> mithilfe eines regulären Ausdrucks überprüfen. Anhand des Musters [0-9]* lassen wir den Browser wissen, dass wir nur Zahlen in dem Feld akzeptieren. Außerdem wird dadurch die numerische Tastatur im Browser ohne inputmode-Unterstützung ausgelöst.

Unser HTML sieht jetzt so aus:

<input
  type="text"
  name="token"
  id="token"
  inputmode="numeric"
  pattern="[0-9]*"
/>

Und die Tastatur bietet nun eine viel einfachere numerische Eingabe:

Eine in iOS Safari angezeigte Webseite, auf der eine Aufforderung zur Zwei-Faktor-Authentisierung angezeigt wird. Dieses Mal wird eine Tastatur angezeigt, die ausschließlich Zahlen enthält.

Eine Sache, die das Ausfüllen dieses Formulars noch einfacher machen würde, wäre das automatische Ausfüllen des Einmalpassworts.

HTML autocomplete

Laut MDN „können Webentwickler festlegen, welche Berechtigungen, falls überhaupt, der Benutzer-Agent hat, um eine automatische Unterstützung beim Ausfüllen von Werten für Formularfelder bereitzustellen, sowie dem Browser eine Anleitung hinsichtlich des Typs der Informationen geben, die in dem Feld erwartet werden“.

In iOS und Safari auf macOS können wir dies nutzen, um den Browser Zwei-Faktor-Authentisierungscodes vorschlagen zu lassen, die per SMS an das Gerät gesendet werden. Durch das Hinzufügen des autocomplete-Attributs mit dem Wert „one-time-code“ (Einmaliger Code) lösen wir dieses Verhalten aus.

<input
  type="text"
  name="token"
  id="token"
  inputmode="numeric"
  pattern="[0-9]*"
  autocomplete="one-time-code"
/>

Damit ist unser <input> vollständig und die Erfahrung für den Benutzer sieht jetzt so aus:

Eine in iOS Safari angezeigte Webseite, auf der eine Aufforderung zur Zwei-Faktor-Authentisierung angezeigt wird. Es gibt auch eine Benachrichtigung mit einem Zwei-Faktor-Authentisierungscode und die Tastatur schlägt das automatische Ausfüllen vor.

Weitere nützliche Werte für das automatische Ausfüllen

Es gibt viele verfügbare Werte für das automatische Ausfüllen, von Namen und Adressen bis hin zu Kreditkarten- und weiteren Kontodaten. Für die Registrierung und Anmeldung gibt es einige Werte für das automatische Ausfüllen, die besonders nützliche Hinweise sind: usernameemailnew-passwordcurrent-password.

Browser und Passwort-Manager verfügen zwar über eine sehr gute Heuristik, wenn es darum geht, Anmeldeformulare auf Webseiten zu finden, aber durch die Verwendung der Werte username und current-password ist das Ganze sehr offensichtlich. Wir sollten die Verwendung dieser Attribute vor allem dann in Betracht ziehen, wenn wir ein Anmeldeformular mit Benutzernamen und Passwort auf verschiedenen Seiten erstellen.

Wir müssen bei einem Registrierungsformular darauf achten, dass wir den Wert „new-password“ verwenden, da es in manchen Browsern Passwortvorschläge auslöst.

Ein Anmeldeformular in Firefox. Das Passwortfeld hat ein starkes Passwort vorgeschlagen.

Automatisches Ausfüllen von Einmalpasswörtern in anderen Browsern

Dieses Verhalten des automatischen Ausfüllens existiert im Moment nur in Safari auf iOS und macOS, aber das Chrome-Team untersucht bereits ähnliche Ideen, um diesen Vorgang zu optimieren. Derzeit läuft ein Versuch mit einer imperativen SMS-Receiver-API nach dem Vorbild der SMS-Receiver-API von Android. Damit könnten Entwickler das Einmalpasswort aus der SMS extrahieren und, da es in JavaScript ist, sofort das Formular senden. Der Benutzer würde dadurch mehr Zeit sparen.

Zum Zeitpunkt der Erstellung dieses Blogs ist diese API Teil eines sogenannten „Origin Trial“, d. h. du kannst sie testen und dein Feedback an das Chrome-Team senden. Wenn du daran Interesse hast, dann registriere dich und spiele mit der API.

Bessere Erfahrungen mit HTML

In diesem Blog haben wir gesehen, dass wir mit einigen wenigen HTML-Attributen die Erfahrung unserer Benutzer bei der Anmeldung, vor allem auf Mobilgeräten, verbessern können.

Das <input>-Element ist eines der interessantesten HTML-Elemente, auf die wir Zugriff haben. Je nach Attribut kann es sich um ein Textfeld, einen Bereichsschieberegler, eine Dateiauswahl, eine Schaltfläche und vieles mehr handeln.

Wenn du die Erfahrung bei der Zwei-Faktor-Authentisierung noch weiter verbessern möchtest, dann sieh dir die Authy-Push-Authentifizierung an. Dadurch entfällt das Kopieren von Codes komplett.

Hast du Vorschläge oder Tipps, wie die Anmeldeerfahrung für Benutzer verbessert werden kann? Dann würde ich gern davon erfahren. Hinterlasse unten einen Kommentar oder kontaktiere mich auf Twitter unter @philnash.