Signatur
Beschreibung
Die schreibgeschützte Eigenschaft id des Interfaces Credential enthält die Kennung eines Berechtigungsnachweises als String. Sie ist Teil der Credential Management API und wird von allen abgeleiteten Typen geerbt, zum Beispiel PasswordCredential, FederatedCredential, PublicKeyCredential (WebAuthn/Passkeys) und IdentityCredential (FedCM).
Was die Kennung genau bedeutet, hängt vom Typ ab:
PasswordCredential: der Benutzername bzw. die E-Mail-Adresse, mit der sich jemand anmeldet.FederatedCredential: die Konto-Kennung beim Identitätsanbieter, meist ebenfalls eine E-Mail-Adresse.PublicKeyCredential: die Credential-ID im base64url-Format. Sie ist identisch mitrawId(einemArrayBuffer), nur als String kodiert.
Die Eigenschaft wird typischerweise nach navigator.credentials.get() oder navigator.credentials.create() ausgelesen, um den Nachweis einem Konto auf dem Server zuzuordnen. Bei WebAuthn zum Beispiel speichert der Server die Credential-ID bei der Registrierung und sucht damit später bei der Anmeldung den passenden öffentlichen Schlüssel.
Rückgabewert
PasswordCredential und FederatedCredential, base64url-kodierte Credential-ID bei PublicKeyCredential.Beispiele
Benutzernamen aus einem gespeicherten Passwort lesen
// Automatische Anmeldung mit einem im Browser gespeicherten Passwort
const autoLogin = async () => {
if (!('PasswordCredential' in window)) return;
const cred = await navigator.credentials.get({
password: true,
mediation: 'optional'
});
if (cred && cred.type === 'password') {
console.log(`Angemeldet als: ${cred.id}`);
// cred.password ist nur in Chromium-Browsern verfügbar
}
};
autoLogin();
WebAuthn: Credential-ID nach der Registrierung an den Server schicken
const registerPasskey = async (options) => {
// options kommen vom Server (challenge, rp, user, pubKeyCredParams ...)
const cred = await navigator.credentials.create({ publicKey: options });
console.log(cred.type); // 'public-key'
console.log(typeof cred.id); // 'string' (base64url)
console.log(cred.rawId instanceof ArrayBuffer); // true
await fetch('/api/passkeys', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ credentialId: cred.id })
});
};
Prüfen, ob id und rawId übereinstimmen
// rawId (ArrayBuffer) in base64url umwandeln und mit id vergleichen
const toBase64Url = (buffer) =>
btoa(String.fromCharCode(...new Uint8Array(buffer)))
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/, '');
const checkId = async (publicKeyOptions) => {
const cred = await navigator.credentials.get({ publicKey: publicKeyOptions });
console.log(toBase64Url(cred.rawId) === cred.id);
};
// Wichtig · Fallstricke
- Schreibgeschützt: Wenn man
idnachträglich zuweist, passiert nichts (im Strict Mode gibt es einenTypeError). Die Kennung wird beim Anlegen festgelegt, z. B. übernew PasswordCredential({ id, password }). - Das Format hängt vom Typ ab: Bei
PublicKeyCredentialistidbase64url-kodiert, ohne Padding. Standard-Base64 mit+,/und=passt nicht dazu. Den Typ vorher übercred.typeprüfen. - Sicherheit: Die Kennung ist kein Geheimnis und beweist keine Identität. Bei WebAuthn muss der Server immer die Signatur prüfen und darf sich nicht auf die übermittelte ID allein verlassen. Benutzernamen aus
PasswordCredential.idnicht ungeprüft perinnerHTMLeinfügen (XSS-Gefahr). - Kompatibilität:
PasswordCredentialundFederatedCredentialgibt es praktisch nur in Chromium-Browsern.PublicKeyCredentialwird von allen modernen Browsern unterstützt. Die API funktioniert nur in sicheren Kontexten (HTTPS).