Typen von Anmeldeinformationen

Die Credential Management API ermöglicht es einer Website, Anmeldeinformationen zu erstellen, zu speichern und abzurufen, die es einem Benutzer ermöglichen, sich sicher einzuloggen. Sie unterstützt vier verschiedene Arten von Anmeldeinformationen:

Typ Schnittstelle
Passwort PasswordCredential
Föderierte Identität IdentityCredential, FederatedCredential (veraltet)
Einmalpasswort (OTP) OTPCredential
Web-Authentifizierung PublicKeyCredential

Die Anmeldeinformationstypen sind alle als Unterklassen der Credential Schnittstelle dargestellt:

Klassendiagramm, das die fünf verschiedenen Unterklassen von Anmeldeinformationen zeigt.

In diesem Leitfaden werden wir die verschiedenen Arten von Anmeldeinformationen einführen und auf hoher Ebene erklären, wie sie verwendet werden.

Hinweis: Obwohl wir hier alle Anmeldeinformationstypen zusammen beschreiben, sind die verschiedenen Anmeldeinformationstypen in mehreren unterschiedlichen Spezifikationen definiert, die die Hauptspezifikation der Credential Management API erweitern.

Passwörter

Hinweis: Die meisten Browser unterstützen diesen Anmeldeinformationstyp nicht und er wird im Web nicht weit verbreitet eingesetzt. Stattdessen bieten Browser automatisch an, Passwörter in einem Passwort-Manager zu speichern und können gespeicherte Passwörter automatisch abrufen, um Passworteingabeelemente automatisch auszufüllen.

Moderne Browser bieten Benutzern einen Passwort-Manager, mit dem Benutzer die Passwörter speichern können, die sie auf Websites eingeben, und sie später abrufen können, wenn sie sich erneut einloggen müssen. Passwort-Manager können helfen, die Passwortsicherheit zu erhöhen, indem sie Passwörter für Benutzer merken und automatisch ausfüllen, was es Benutzern ermöglicht, stärkere Passwörter zu wählen.

In der Credential Management API wird ein Passwort durch die PasswordCredential Schnittstelle dargestellt. Wenn ein Benutzer sich erfolgreich für Ihre Website registriert oder sich dort anmeldet, können Sie den PasswordCredential() Konstruktor oder navigator.credentials.create() aufrufen, um ein PasswordCredential Objekt aus den eingegebenen Anmeldeinformationen des Benutzers zu erstellen. Sie können dieses dann in navigator.credentials.store() übergeben, und der Browser wird den Benutzer fragen, ob er das Passwort im Passwort-Manager speichern möchte.

Sequenzdiagramm zur Erstellung und Speicherung einer Passwort-Anmeldeinformation.

Wenn ein Benutzer Ihre Website besucht, können Sie navigator.credentials.get() aufrufen, um ein gespeichertes Passwort für Ihre Website abzurufen und es zu verwenden, um den Benutzer einzuloggen. Je nach Situation können Sie den Benutzer leise einloggen oder das zurückgegebene Passwort verwenden, um ein Formularfeld automatisch auszufüllen.

Sequenzdiagramm zur Anmeldung mit einer Passwort-Anmeldeinformation.

Anmeldeinformationen für föderierte Identitäten

In einem föderierten Identitätssystem agiert eine separate Einheit als Vermittler zwischen dem Benutzer und der Website, bei der er sich anmelden möchte. Diese Einheit, genannt Identity Provider (IdP), verwaltet die Anmeldeinformationen des Benutzers, kann Benutzer authentifizieren und wird von der Website vertraut, um Aussagen über die Identität eines Benutzers zu machen.

Der Benutzer hat ein Konto beim IdP: Wenn er sich bei der Website anmelden muss, authentifiziert er sich beim IdP. Der IdP gibt dann ein Token an den Browser des Benutzers zurück, das der Browser an die Website liefert. Die Website überprüft das Token und meldet, wenn die Überprüfung erfolgreich ist, den Benutzer an.

Föderierte Identität wird oft als Dienst von Unternehmen angeboten: Beispielweise können Benutzer mit Google-, Microsoft- oder Facebook-Konten sich auf Websites anmelden, die diese unterstützen.

Die Federated Credential Management API definiert einen datenschutzfreundlichen Mechanismus für föderierte Identität im Web. Sie starten, indem Sie navigator.credentials.get() aufrufen, um eine föderierte Identitätsanmeldeinformation anzufordern, was einen Protokollaustausch zwischen dem Browser und dem IdP auslöst.

Wenn der Benutzer im Verlauf dieses Austauschs mit dem IdP authentifiziert werden kann, gibt der Browser ein IdentityCredential Objekt als Erfüllung des von get() zurückgegebenen Promise zurück. Der Front-End-Code der Website kann dies zur Überprüfung an den Server senden.

Sequenzdiagramm zur Anmeldung mit einer Anmeldeinformation für föderierte Identität.

Beachten Sie, dass create() und store() nicht verwendet werden, wenn mit der Federated Credential Management API gearbeitet wird.

Hinweis: Der Support für föderierte Identität in der Credential Management API wurde ursprünglich über die FederatedCredential Schnittstelle bereitgestellt. Diese Methode basiert jedoch auf Technologien wie Drittanbieter-Cookies, die von Natur aus datenschutzinvasiv sind. Diese Technologien wurden in Browsern veraltet, daher war ein neuer Ansatz erforderlich.

Einmalpasswörter

Ein Einmalpasswort (OTP) ist eine Authentifizierungstechnik, bei der die Website einen einmaligen Code über ein Nachrichtensystem wie E-Mail oder SMS an den Benutzer sendet. Der Benutzer muss dann den Code auf der Website eingeben, um seine Kontrolle über den Kommunikationsendpunkt zu beweisen. Websites verwenden dies manchmal als zweiten Authentifizierungsfaktor zusätzlich zu einem Passwort.

Die WebOTP API definiert die OTPCredential Schnittstelle, die ein spezielles Benutzerfreundlichkeitsproblem in diesem Austausch löst: Wenn ein Benutzer den Code erhält, muss er eine andere Anwendung öffnen, die Nachricht finden und dann den Code in ein Formular auf der Website kopieren. Dies ist umständlich, insbesondere auf einem mobilen Gerät und insbesondere, wenn dasselbe Gerät verwendet wird, um sich bei der Website einzuloggen und die Nachricht zu empfangen.

In Browsern, die den OTPCredential Typ unterstützen, kann das Front-End der Website navigator.credentials.get() aufrufen, um eine OTP-Anmeldeinformation anzufordern und den Backend dann bitten, einen Code zu generieren und die Nachricht zu senden (nur SMS wird als Transport unterstützt). Der Backend muss eine speziell formatierte SMS-Nachricht senden, die der Browser lesen kann.

Der Browser gibt dann ein OTPCredential Objekt als Erfüllung des von get() zurückgegebenen Promise zurück, und dieses Objekt enthält den Code. Der Front-End der Website kann den Code verwenden, um ein Eingabeelement automatisch auszufüllen oder den Code automatisch an den Server zu senden.

Sequenzdiagramm zur Anmeldung mit einer OTP-Anmeldeinformation.

Beachten Sie, dass create() und store() nicht verwendet werden, wenn mit OTP-Anmeldeinformationen gearbeitet wird.

Web-Authentifizierungsnachweise

Die Web Authentication API (WebAuthn) ermöglicht es Benutzern, sich bei Websites anzumelden, indem sie einen Authenticator um die Erstellung digital signierter Bestätigungen über die Identität eines Benutzers bitten.

Ein Authenticator ist eine Entität, die sich im oder am Gerät des Benutzers befindet und die kryptografischen Operationen durchführen kann, die zum Registrieren und Authentifizieren von Benutzern erforderlich sind, und die kryptografischen Schlüssel, die in diesen Operationen verwendet werden, sicher speichern kann. Ein Authenticator könnte in das Gerät integriert sein, wie das Touch ID System in Apple-Geräten oder das Windows Hello System, oder es könnte ein abnehmbares Modul wie ein YubiKey sein.

Anstelle von Passwörtern verwendet WebAuthn die Public-Key-Kryptographie, um Benutzer zu authentifizieren.

Um einen Benutzer auf einer Website mit WebAuthn zu registrieren, rufen Sie navigator.credentials.create() auf und geben alle Informationen an, die zum Erstellen eines Schlüsselpaares benötigt werden. Der Authenticator kann den Benutzer zunächst bitten, sich zu authentifizieren, zum Beispiel mit einem biometrischen Reader. Er wird dann ein Schlüsselpaar generieren und den öffentlichen Schlüssel zurückgeben. Dieses Schlüsselpaar ist spezifisch für den Benutzer und die Website. Der Authenticator kann auch eine signierte Attestation generieren und zurückgeben: dies ist eine Aussage, dass der Authenticator selbst (zum Beispiel) ein echter YubiKey ist.

Der Front-End der Website sendet den öffentlichen Schlüssel und die Attestation an den Server, der die Attestation überprüft und den öffentlichen Schlüssel mit den restlichen neuen Kontoinformationen des Benutzers speichert.

Sequenzdiagramm zur Registrierung mit Web-Authentifizierung.

Um einen Benutzer auf der Website anzumelden, ruft der Front-End-Code zunächst eine Zufallszahl vom Server ab, die als Challenge bezeichnet wird. Dann ruft er navigator.credentials.get() auf, übergibt die Challenge sowie einige andere Optionen. Der Authenticator kann den Benutzer nochmals bitten, sich zu authentifizieren, und wird dann die Challenge mit dem privaten Schlüssel signieren.

Der Browser gibt dann ein PublicKeyCredential Objekt in der Erfüllung des von get() zurückgegebenen Promise zurück, und dieses Objekt enthält die signierte Challenge, die als Assertion bezeichnet wird. Der Front-End der Website sendet die Assertion dann an den Server, der die Signatur mit dem gespeicherten öffentlichen Schlüssel überprüft und entscheidet, ob der Benutzer eingeloggt wird.

Sequenzdiagramm zur Anmeldung mit einer Web-Authentifizierungsbestätigung.

Beachten Sie, dass store() nicht verwendet wird, wenn mit WebAuthn gearbeitet wird: das Schlüsselpaar wird im Authenticator erstellt und der private Schlüssel verlässt ihn nie.

Siehe auch