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 ein neues Credential, das 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 Typen von Credentials:
- Ein Passwort-Credential, das es einem Benutzer ermöglicht, sich mit einem Passwort anzumelden.
- Ein föderiertes Credential, das es einem Benutzer ermöglicht, sich mit einem föderierten Identitätsanbieter anzumelden.
- Ein Public Key Credential, das es einem Benutzer ermöglicht, sich mit einem Authentifikator wie etwa einem in die Plattform integrierten biometrischen Leser oder einem entfernbaren Hardware-Token anzumelden.
Beachten Sie, dass die Federated Credential Management API (FedCM) den föderierten Credential-Typ ablöst.
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 (im Allgemeinen, wenn der Abbruch nach Abschluss der Operation empfangen wurde) oder mit einemAbortError-DOMExceptionfehlschlagen.
Jede der folgenden Eigenschaften stellt einen zu erstellenden Credential-Typ dar. Einer und nur einer von ihnen muss angegeben werden:
federatedOptional-
Ein
FederatedCredentialInit-Objekt, das Anforderungen für die Erstellung eines föderierten 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 Benutzeragent neue Credentials über einen Authentifikator erstellt — entweder für die Registrierung eines neuen Kontos oder für die Verknüpfung eines neuen asymmetrischen Schlüsselpaares mit einem bestehenden Konto.Hinweis: Die Nutzung von
create()mit dempublicKey-Parameter kann durch eine auf Ihrem Server festgelegtepublickey-credentials-createPermissions Policy blockiert werden.
Rückgabewert
Ein Promise, das mit einem der folgenden aufgelöst wird:
- Ein
FederatedCredential, wenn der Credential-Typfederatedwar. - Ein
PasswordCredential, wenn der Credential-Typpasswordwar. - Ein
PublicKeyCredential, wenn der Credential-TyppublicKeywar.
Wenn kein Credential-Objekt erstellt werden kann, wird das Promise mit null aufgelöst.
Ausnahmen
TypeError-
Im Falle einer Erstellung eines
PasswordCredential-Antrags, wurdenid,originoderpasswordnicht bereitgestellt (leer). NotAllowedErrorDOMException-
Mögliche Ursachen sind:
- Die Nutzung wurde durch eine
publickey-credentials-createPermissions Policy blockiert. - Die Funktion wird cross-origin aufgerufen, aber das
allow-Attribut des<iframe>s setzt keine passendepublickey-credentials-create-Richtlinie. - Die Funktion wird cross-origin aufgerufen und das
<iframe>hat keine transiente Aktivierung. - Es wird versucht, ein entdeckbares Credential zu erstellen (
residentKeyist in dercreate()-AufrufoptionPublicKeyCredentialCreationOptionsaufrequiredgesetzt), aber der Benutzer hat keinen Sicherheitsschlüssel, der entdeckbare Credentials unterstützt, und bricht den Vorgang ab.
- Die Nutzung wurde durch eine
AbortErrorDOMException-
Die Operation wurde abgebrochen.
Beispiele
>Erstellung 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
});
Erstellung eines föderierten Credentials
Dieses Beispiel erstellt ein föderiertes 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);
});
Erstellung 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, wenn erfolgreich, gibt ein Promise zurück, das mit einem PublicKeyCredential-Objektinstanz aufgelöst wird, das ein Public Key Credential darstellt, das später über einen WebAuthn-get()-Aufruf zur Authentifizierung eines Benutzers verwendet werden kann. Seine PublicKeyCredential.response-Eigenschaft enthält ein AuthenticatorAttestationResponse-Objekt, das Zugriff auf mehrere nützliche Informationen bietet, einschließlich der Authentifikatordaten, des öffentlichen Schlüssels, 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 für künftige Authentifizierungsvorgänge gegen dieses Credential gespeichert werden — beispielsweise der öffentliche Schlüssel, der verwendete Algorithmus und die zulässigen Transports.
Hinweis: Weitere Informationen darüber, wie der gesamte Ablauf funktioniert, finden Sie unter Schlüsselpaar und Benutzer registrieren.
Spezifikationen
| Specification |
|---|
| Credential Management Level 1> # dom-credentialscontainer-create> |