PublicKeyCredentialCreationOptions
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.
Das PublicKeyCredentialCreationOptions
Dictionary stellt das Objekt dar, das an CredentialsContainer.create()
als Wert der publicKey
-Option übergeben wird: das heißt, wenn create()
verwendet wird, um ein Public Key Credential mit der Web Authentication API zu erstellen.
Instanz-Eigenschaften
attestation
Optional-
Ein String, der die Vorliebe der vertrauenden Partei für die Art und Weise angibt, wie die Attestationsaussage (d.h. die Bereitstellung überprüfbarer Nachweise der Authentizität des Authenticators und seiner Daten) während der Erstellung des Credentials übermittelt wird. Der Wert kann einer der folgenden sein:
"none"
-
Gibt an, dass die vertrauende Partei nicht an einem Authenticator-Attestation interessiert ist. Dies könnte dazu dienen, zusätzliche Benutzerzustimmungen für Roundtrips zum vertrauenden Parteiserver zu vermeiden, um identifizierende Informationen zu übermitteln, oder Roundtrips zu einer Attestation-Zertifizierungsstelle (CA), um den Authentifizierungsprozess reibungsloser zu gestalten. Wenn
"none"
alsattestation
-Wert gewählt wird und der Authenticator signalisiert, dass er eine CA verwendet, um seine Attestationsaussage zu generieren, ersetzt die Client-App sie durch eine "None"-Attestationsaussage, die anzeigt, dass keine Attestationsaussage verfügbar ist. "direct"
-
Gibt an, dass die vertrauende Partei die von dem Authenticator generierte Attestationsaussage erhalten möchte.
"enterprise"
-
Gibt an, dass die vertrauende Partei eine Attestationsaussage erhalten möchte, die möglicherweise eindeutig identifizierende Informationen enthält. Dies ist für kontrollierte Bereitstellungen innerhalb eines Unternehmens gedacht, in denen die Organisation Registrierungen an bestimmte Authenticator binden möchte.
"indirect"
-
Gibt an, dass die vertrauende Partei eine überprüfbare Attestationsaussage erhalten möchte, aber dem Client überlassen wird, wie sie empfangen wird. Zum Beispiel könnte der Client wählen, die Assertion-Aussage des Authenticators durch eine von einer Anonymisierungs-CA zu ersetzende, um die Privatsphäre des Benutzers zu schützen.
Wenn
attestation
weggelassen wird, ist der Standardnone
. attestationFormats
Optional-
Ein Array von Strings, das die Präferenz der vertrauenden Partei für das von dem Authenticator verwendete Format der Attestationsaussage angibt. Die Werte sollten von höchster bis niedrigster Präferenz geordnet sein und als Hinweise betrachtet werden – der Authenticator kann wählen, eine Attestationsaussage in einem anderen Format auszustellen. Für eine Liste gültiger Formate siehe WebAuthn Attestation Statement Format Identifiers.
Wenn weggelassen, ist
attestationFormats
standardmäßig ein leeres Array. authenticatorSelection
Optional-
Ein Objekt, dessen Eigenschaften Kriterien sind, die potenzielle Authenticator für den Credential-Erstellungsvorgang filtern. Dieses Objekt kann folgende Eigenschaften enthalten:
authenticatorAttachment
Optional-
Ein String, der angibt, welcher Authenticator-Anschlusstyp für den gewählten Authenticator zulässig sein soll. Mögliche Werte sind:
"platform"
-
Der Authenticator ist Teil des Geräts, auf dem WebAuthn läuft (ein sogenannter Plattformauthenticator), daher kommuniziert WebAuthn mit ihm über einen transport, der auf dieser Plattform verfügbar ist, wie eine plattformspezifische API. Ein an einen Plattformauthenticator gebundenes Public Key Credential wird als Plattformcredential bezeichnet.
"cross-platform"
-
Der Authenticator ist nicht Teil des Geräts, auf dem WebAuthn läuft (ein sogenannter mobiler Authenticator, da er zwischen verschiedenen Geräten wandern kann), daher kommuniziert WebAuthn mit ihm über ein plattformübergreifendes Transportprotokoll wie Bluetooth oder NFC. Ein an einen mobilen Authenticator gebundenes Public Key Credential wird als mobiles Credential bezeichnet.
Wenn weggelassen, kann jeder Typ von Authenticator, entweder Plattform oder plattformübergreifend, für den Credential-Erstellungsvorgang ausgewählt werden.
requireResidentKey
Optional-
Ein boolescher Wert. Wenn auf
true
gesetzt, bedeutet dies, dass ein Resident Key erforderlich ist (sieheresidentKey
). Diese Eigenschaft ist veraltet, aber in einigen Implementierungen für die Rückwärtskompatibilität mit WebAuthn Level 1 noch verfügbar. Der Wert sollte auftrue
gesetzt werden, wennresidentKey
auf"required"
gesetzt ist.Wenn weggelassen, ist
requireResidentKey
standardmäßigfalse
. residentKey
Optional-
Ein String, der angibt, in welchem Maße die vertrauende Partei wünscht, ein client-seitiges Discoverable Credential zu erstellen (also eines, das in Authentifizierungsanfragen verwendet werden kann, bei denen die vertrauende Partei keine Credential-IDs bereitstellt —
navigator.credentials.get()
wird mit einem leerenallowCredentials
-Wert aufgerufen). Die Alternative ist ein Server-seitiges Credential, bei dem die vertrauende Partei Credential-IDs imget()
allowCredentials
-Wert bereitstellen muss. Mögliche Werte sind:"discouraged"
-
Die vertrauende Partei bevorzugt die Erstellung eines Server-seitigen Credentials, akzeptiert jedoch ein client-seitiges Discoverable Credential.
"preferred"
-
Die vertrauende Partei bevorzugt stark die Erstellung eines client-seitigen Discoverable Credentials, akzeptiert jedoch ein Server-seitiges Credential. Der Benutzeragent sollte den Benutzer durch die Einrichtung der Benutzerverifizierung führen, falls erforderlich, um ein Discoverable Credential zu erstellen. Dies hat Vorrang vor der
userVerification
-Einstellung. "required"
-
Die vertrauende Partei erfordert ein client-seitiges Discoverable Credential. Wenn eines nicht erstellt werden kann, wird ein
NotAllowedError
DOMException
geworfen. Weitere Details siehe diecreate()
Ausnahmeliste.
Wenn weggelassen, ist
residentKey
standardmäßig"required"
, wennrequireResidentKey
true
ist, andernfalls ist der Standardwert"discouraged"
. userVerification
Optional-
Ein String, der die Anforderungen der vertrauenden Partei an die Benutzerverifizierung für den
create()
-Vorgang angibt. Mögliche Werte sind:"discouraged"
-
Die vertrauende Partei bevorzugt keine Benutzerverifizierung für den
create()
-Vorgang, um Störungen des Benutzererlebnisses zu minimieren. "preferred"
-
Die vertrauende Partei bevorzugt die Benutzerverifizierung für den
create()
-Vorgang, aber es wird nicht fehlschlagen, wenn die Benutzerverifizierung nicht durchgeführt werden kann. "required"
-
Die vertrauende Partei erfordert die Benutzerverifizierung für den
create()
-Vorgang — wenn die Benutzerverifizierung nicht ausgeführt werden kann, wird ein Fehler geworfen.
Wenn weggelassen, ist
userVerification
standardmäßig"preferred"
.
challenge
-
Ein
ArrayBuffer
,TypedArray
, oderDataView
, bereitgestellt durch den Server der vertrauenden Partei und verwendet als kryptografische Herausforderung. Dieser Wert wird vom Authenticator unterschrieben und die Signatur wird als Teil vonAuthenticatorAttestationResponse.attestationObject
zurückgesendet. excludeCredentials
Optional-
Ein
Array
von Objekten, die bestehende Credentials beschreiben, die bereits diesem Benutzerkonto zugeordnet sind (wie durchuser.id
identifiziert). Dies wird von der vertrauenden Partei bereitgestellt und vom Benutzeragenten überprüft, um die Erstellung eines neuen Public Key Credentials auf einem Authenticator zu vermeiden, der bereits ein Credential zu dem angegebenen Benutzerkonto zugeordnet hat. Jedes Element sollte die folgende Form haben:id
-
Ein
ArrayBuffer
,TypedArray
, oderDataView
, das die bestehende Credential-ID darstellt. transports
Optional-
Ein
Array
von Strings, die erlaubte Transports repräsentieren. Mögliche Transports sind:"ble"
,"hybrid"
,"internal"
,"nfc"
, und"usb"
(siehegetTransports()
für mehr Details). type
-
Ein String, der den Typ des zu erstellenden Public Key Credentials definiert. Dies kann derzeit einen einzelnen Wert haben,
"public-key"
, aber in Zukunft könnten weitere Werte hinzugefügt werden.
Wenn der
create()
Aufruf versucht, ein doppeltes Public Key Credential auf einem Authenticator zu erstellen, wird der Benutzeragent den Benutzer dazu leiten, das Credential mit einem anderen Authenticator zu erstellen, oder er scheitert, wenn dies nicht möglich ist.Wenn
excludeCredentials
weggelassen wird, ist der Standardwert ein leeres Array. extensions
Optional-
Ein Objekt, das Eigenschaften enthält, die die Eingabewerte für alle angeforderten Erweiterungen darstellen. Diese Erweiterungen werden verwendet, um spezifische zusätzliche Verarbeitung durch den Client oder Authenticator während des Credential-Erstellungsvorgangs zu spezifizieren. Beispiele beinhalten die Angabe, ob ein zurückgegebenes Credential auffindbar ist, oder ob die vertrauende Partei große Blobs von Daten, die mit einem Credential verbunden sind, speichern kann.
Erweiterungen sind optional und unterschiedliche Browser können verschiedene Erweiterungen erkennen. Die Verarbeitung von Erweiterungen ist für den Client immer optional: Wenn ein Browser eine gegebene Erweiterung nicht erkennt, wird sie einfach ignoriert. Informationen zur Verwendung von Erweiterungen und welche von welchen Browsern unterstützt werden, finden Sie unter Web Authentication-Erweiterungen.
pubKeyCredParams
-
Ein
Array
von Objekten, die die Schlüsselt-Typen und Signatur-Algorithmen spezifizieren, die die vertrauende Partei unterstützt, geordnet von der bevorzugtesten bis zur am wenigsten bevorzugten. Der Client und der Authenticator werden sich bemühen, ein Credential des bevorzugtesten Typs zu erstellen. Diese Objekte enthalten die folgenden Eigenschaften:alg
-
Eine Zahl, die einem COSE-Algorithmus-Identifier entspricht und den kryptografischen Algorithmus für diesen Credential-Typ darstellt. Es wird empfohlen, dass vertrauende Parteien, die eine große Bandbreite an Authenticatoren unterstützen möchten, mindestens die folgenden Werte in den bereitgestellten Optionen einschließen:
-8
: EdDSA-7
: ES256-257
: RS256
type
-
Ein String, der den Typ des zu erstellenden Public Key Credentials definiert. Dies kann derzeit einen einzelnen Wert haben,
"public-key"
, aber in Zukunft könnten weitere Werte hinzugefügt werden.
Wenn keiner der aufgelisteten Credential-Typen erstellt werden kann, schlägt der
create()
-Vorgang fehl. rp
-
Ein Objekt, das die vertrauende Partei beschreibt, die die Erstellung des Credentials angefordert hat. Es kann die folgenden Eigenschaften enthalten:
id
Optional-
Ein String, der die ID der vertrauenden Partei repräsentiert. Ein Public Key Credential kann nur zur Authentifizierung mit der gleichen vertrauenden Partei (wie durch
publicKey.rpId
in einemnavigator.credentials.get()
Aufruf identifiziert) verwendet werden, mit der es registriert wurde — die IDs müssen übereinstimmen.Die
id
kann keinen Port oder Scheme wie ein standardmäßiger Ursprung enthalten, aber das Schema der Domäne muss dashttps
Schema sein. Dieid
muss der effektiven Domäne des Ursprungs entsprechen oder ein Domainsuffix davon sein. So sind zum Beispiel, wenn der Ursprung der vertrauenden Parteihttps://login.example.com:1337
ist, folgendeid
s gültig:login.example.com
example.com
Aber nicht:
m.login.example.com
com
Wenn weggelassen, ist
id
standardmäßig der Dokumentenursprung — was in diesem Beispiellogin.example.com
wäre. name
-
Ein String, der den Namen der vertrauenden Partei repräsentiert (z.B.
"Facebook"
). Dies ist der Name, der dem Benutzer bei der Erstellung oder Validierung eines WebAuthn-Vorgangs angezeigt wird.
timeout
Optional-
Ein numerischer Hinweis, in Millisekunden, der angibt, wie lange die aufrufende Web-App bereit ist, auf die Fertigstellung des Erstellungsvorgangs zu warten. Dieser Hinweis kann durch den Browser überschrieben werden.
user
-
Ein Objekt, das das Benutzerkonto beschreibt, für das das Credential generiert wird. Es kann folgende Eigenschaften enthalten:
displayName
-
Ein String, der einen benutzerfreundlichen Anzeigenamen bereitstellt (Beispiel:
"John Doe"
), der vom Benutzer bei der erstmaligen Registrierung mit der vertrauenden Partei festgelegt wird. id
-
Ein
ArrayBuffer
,TypedArray
, oderDataView
, das eine eindeutige ID für das Benutzerkonto darstellt. Dieser Wert hat eine maximale Länge von 64 Bytes und ist nicht dafür gedacht, dem Benutzer angezeigt zu werden. name
-
Ein String, der eine benutzerfreundliche Kennung für das Benutzerkonto bereitstellt, um zwischen verschiedenen Konten mit ähnlichen
displayName
s zu unterscheiden. Dies könnte eine E-Mail-Adresse (wie"john.doe@example.com"
), Telefonnummer (zum Beispiel"+12345678901"
), oder eine andere Art von Benutzerkonto-Kennung (zum Beispiel"JohnDoe667"
) sein.
hints
Optional Experimentell-
Ein Array von Strings, das Hinweise darauf liefert, welche Authentifizierung-UI der Benutzeragent dem Benutzer bereitstellen sollte.
Die Werte können folgende sein:
"security-key"
-
Die Authentifizierung erfordert ein separates, dediziertes physisches Gerät, um den Schlüssel bereitzustellen.
"client-device"
-
Der Benutzer authentifiziert sich mit seinem eigenen Gerät, wie einem Telefon.
"hybrid"
-
Die Authentifizierung beruht auf einer Kombination von Autorisierungs-/Authentifizierungsmethoden, möglicherweise sowohl auf Benutzer- als auch auf serverbasierten Mechanismen.
Beispiele
Erstellen eines Public Key Credentials
Dieses Beispiel erstellt ein PublicKeyCredentialCreationOptions
, spezifiziert nur die erforderlichen Eigenschaften und verwendet Standardwerte für den Rest.
Es übergibt dann das Objekt an navigator.credentials.create()
, um ein neues Public Key Credential zu erstellen.
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 });
Ein erfolgreicher create()
-Aufruf gibt ein Versprechen zurück, das mit einem PublicKeyCredential
Objektinstanz aufgelöst wird, das ein Public Key Credential repräsentiert, 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, darunter Authenticator-Daten, Public Key, Transportmechanismen und mehr, bietet.
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 zukünftige Authentifizierungsvorgänge gegen dieses Credential gespeichert werden — zum Beispiel der Public Key, der verwendete Algorithmus und die erlaubten Transportmittel.
Weitere Informationen darüber, wie der gesamte Ablauf funktioniert, finden Sie unter Erstellen eines Schlüsselpaares und Registrieren eines Benutzers.
Spezifikationen
Specification |
---|
Web Authentication: An API for accessing Public Key Credentials - Level 3 # dictionary-makecredentialoptions |