CredentialsContainer: create()-Methode
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2019.
* Some parts of this feature may have varying levels of support.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Die create()-Methode der CredentialsContainer-Schnittstelle erstellt eine neue Credential, die dann gespeichert und später mit der navigator.credentials.get()-Methode abgerufen werden kann. Das abgerufene Credential kann dann von einer Website verwendet werden, um einen Benutzer zu authentifizieren.
Diese Methode unterstützt drei verschiedene Arten von Credentials:
- Ein Passwort-Credential, das es einem Benutzer ermöglicht, sich mit einem Passwort anzumelden.
- Ein federiertes Credential, das es einem Benutzer ermöglicht, sich über einen föderierten Identitätsanbieter anzumelden.
- Ein public key-Credential, das es einem Benutzer ermöglicht, sich mit einem Authenticator wie einem in die Plattform integrierten biometrischen Leser oder einem abnehmbaren Hardware-Token anzumelden.
Beachten Sie, dass die Federated Credential Management API (FedCM) den Typ des federierten Credentials ersetzt.
Syntax
create()
create(options)
Parameter
optionsOptional-
Ein Objekt, das Optionen für das angeforderte neue
Credentials-Objekt enthält. Es kann die folgenden Eigenschaften enthalten:signalOptional-
Eine Instanz des
AbortSignal-Objekts, die es ermöglicht, eine laufendecreate()-Operation abzubrechen. Eine abgebrochene Operation kann normal abgeschlossen werden (in der Regel, wenn der Abbruch empfangen wurde, nachdem die Operation abgeschlossen war) oder mit einemAbortErrorDOMExceptionzurückgewiesen werden.
Jede der folgenden Eigenschaften repräsentiert einen Credential-Typ, der erstellt wird. Nur eine von ihnen muss angegeben werden:
federatedOptional-
Ein
FederatedCredentialInit-Objekt, das Anforderungen für die Erstellung eines federierten Identitätsanbieter-Credentials enthält. passwordOptional-
Ein
PasswordCredentialInit-Objekt, das Anforderungen für die Erstellung eines Passwort-Credentials enthält. publicKeyOptional-
Ein
PublicKeyCredentialCreationOptions-Objekt, das Anforderungen für die Erstellung eines public key-Credentials enthält. Veranlasst dencreate()-Aufruf, dass der User-Agent neue Credentials über einen Authenticator erstellt — entweder zur Registrierung eines neuen Kontos oder zur Verknüpfung eines neuen asymmetrischen Schlüsselpaares mit einem bestehenden Konto.Hinweis: Die Verwendung von
create()mit dempublicKey-Parameter kann durch einepublickey-credentials-createPermissions Policy blockiert werden, die auf Ihrem Server festgelegt ist.
Rückgabewert
Ein Promise, das mit einem der folgenden Elemente aufgelöst wird:
- Ein
FederatedCredential, falls der Credential-Typfederatedwar. - Ein
PasswordCredential, falls der Credential-Typpasswordwar. - Ein
PublicKeyCredential, falls der Credential-TyppublicKeywar.
Wenn kein Credential-Objekt erstellt werden kann, wird das Promise mit null aufgelöst.
Ausnahmen
TypeError-
Bei der Anforderung zur Erstellung eines
PasswordCredentialwurdenid,originoderpasswordnicht angegeben (leer). NotAllowedErrorDOMException-
Mögliche Ursachen:
- Die Nutzung wurde durch eine
publickey-credentials-createPermissions Policy blockiert. - Die Funktion wird Cross-Origin aufgerufen, aber das
iframe-Element hat kein geeignetespublickey-credentials-create-Policy in seinemallow-Attribut festgelegt. - Die Funktion wird Cross-Origin aufgerufen und das
<iframe>hat keine transient activation. - Die Funktion hat versucht, ein discoverable credential zu erstellen (
residentKeyist in dencreate()-Aufruf-Optionen aufrequiredgesetzt), aber der Benutzer hat keinen Authenticator, der discoverable credentials unterstützt.
- Die Nutzung wurde durch eine
AbortErrorDOMException-
Der Vorgang wurde abgebrochen.
Beispiele
>Erstellen eines Passwort-Credentials
Dieses Beispiel erstellt ein Passwort-Credential aus einem PasswordCredentialInit-Objekt.
const credInit = {
id: "serpent1234", // "username" in a typical username/password pair
name: "Serpentina", // display name for credential
origin: "https://example.org",
password: "the last visible dog",
};
const makeCredential = document.querySelector("#make-credential");
makeCredential.addEventListener("click", async () => {
const cred = await navigator.credentials.create({
password: credInit,
});
console.log(cred.name);
// Serpentina
console.log(cred.id);
// serpent1234
console.log(cred.password);
// the last visible dog
});
Erstellen eines federierten Credentials
Dieses Beispiel erstellt ein federiertes Credential aus einem FederatedCredentialInit-Objekt.
const credInit = {
id: "1234",
name: "Serpentina",
origin: "https://example.org",
protocol: "openidconnect",
provider: "https://provider.example.org",
};
const makeCredential = document.querySelector("#make-credential");
makeCredential.addEventListener("click", async () => {
const cred = await navigator.credentials.create({
federated: credInit,
});
console.log(cred.name);
console.log(cred.provider);
});
Erstellen eines public key-Credentials
Dieses Beispiel erstellt ein public key-Credential aus einem PublicKeyCredentialCreationOptions-Objekt.
const publicKey = {
challenge: challengeFromServer,
rp: { id: "acme.com", name: "ACME Corporation" },
user: {
id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
name: "jamiedoe",
displayName: "Jamie Doe",
},
pubKeyCredParams: [{ type: "public-key", alg: -7 }],
};
const publicKeyCredential = await navigator.credentials.create({ publicKey });
Der create()-Aufruf gibt, falls erfolgreich, ein Promise zurück, das mit einer PublicKeyCredential-Objektinstanz aufgelöst wird, die ein public key-Credential darstellt, das später verwendet werden kann, um einen Benutzer über einen WebAuthn-get()-Aufruf zu authentifizieren. Seine PublicKeyCredential.response-Eigenschaft enthält ein AuthenticatorAttestationResponse-Objekt, das Zugriff auf mehrere nützliche Informationen bietet, einschließlich der Authenticator-Daten, des public keys, der Transportmechanismen und mehr.
navigator.credentials.create({ publicKey }).then((publicKeyCredential) => {
const response = publicKeyCredential.response;
// Access attestationObject ArrayBuffer
const attestationObj = response.attestationObject;
// Access client JSON
const clientJSON = response.clientDataJSON;
// Return authenticator data ArrayBuffer
const authenticatorData = response.getAuthenticatorData();
// Return public key ArrayBuffer
const pk = response.getPublicKey();
// Return public key algorithm identifier
const pkAlgo = response.getPublicKeyAlgorithm();
// Return permissible transports array
const transports = response.getTransports();
});
Einige dieser Daten müssen auf dem Server gespeichert werden, um zukünftige Authentifizierungsoperationen gegen dieses Credential durchzuführen — zum Beispiel der public key, der verwendete Algorithmus und die zulässigen Übertragungen.
Hinweis: Weitere Informationen darüber, wie der gesamte Ablauf funktioniert, finden Sie unter Erstellen eines Schlüsselpaares und Registrieren eines Benutzers.
Spezifikationen
| Specification |
|---|
| Credential Management Level 1> # dom-credentialscontainer-create> |