Signatur
Beschreibung
Der Konstruktor PasswordCredential() gehört zur Credential Management API. Er erzeugt ein Objekt mit Zugangsdaten aus Benutzername und Passwort. Mit diesem Objekt kann eine Webanwendung dem Passwortmanager des Browsers nach einer erfolgreichen Anmeldung oder Registrierung sagen: „Diese Zugangsdaten bitte speichern.“ Das geschieht über navigator.credentials.store().
Es gibt zwei Varianten:
- Mit einem Datenobjekt (
PasswordCredentialData): Sie gebenid(Benutzername),passwordund optionalname,iconURLsowieorigindirekt an. Das passt gut zu Anmeldungen perfetch()ohne klassisches Absenden eines Formulars. - Mit einem
HTMLFormElement: Der Browser liest die Werte anhand derautocomplete-Attribute der Formularfelder aus:username→id,current-passwordbzw.new-password→password,name→name,photo→iconURL.
Typischer Ablauf: Der Benutzer meldet sich an, der Server bestätigt die Anmeldung, danach wird ein PasswordCredential erzeugt und gespeichert. Beim nächsten Besuch kann die Seite die Daten mit navigator.credentials.get({ password: true }) wieder abrufen und den Benutzer so automatisch oder mit einem Klick anmelden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $data Pflicht | PasswordCredentialData | Objekt mit den Zugangsdaten. Pflichtfelder: id (string, Benutzername/Kennung) und password (string). Optional: name (string, Anzeigename), iconURL (string, URL eines Avatars; muss eine sichere URL sein) und origin (string, Herkunft; laut Spezifikation Pflicht, am besten location.origin angeben). Alternativ zu form. |
|
| $form Pflicht | HTMLFormElement | Formular, dessen Felder über autocomplete-Attribute (username, current-password/new-password, name, photo) zugeordnet werden. Alternativ zu data. |
Rückgabewert
PasswordCredential-Objekt mit den Eigenschaften id, password, name, iconURL und type (immer "password"). Fehlen id oder password oder sind sie leer, wird ein TypeError geworfen.Beispiele
Nach erfolgreichem fetch-Login die Zugangsdaten speichern
const login = async (username, password) => {
const res = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password })
});
if (!res.ok) throw new Error('Anmeldung fehlgeschlagen');
// Nur speichern, wenn der Browser die API unterstützt
if ('PasswordCredential' in window) {
const cred = new PasswordCredential({
id: username,
password,
name: 'Max Mustermann',
origin: location.origin
});
await navigator.credentials.store(cred);
console.log('Gespeichert:', cred.type, cred.id);
}
};
login('max@example.com', 'geheim123');
Credential direkt aus einem Formular erzeugen
// HTML:
// <form id="signup">
// <input name="user" autocomplete="username">
// <input name="pw" type="password" autocomplete="new-password">
// <input name="fullname" autocomplete="name">
// <button>Registrieren</button>
// </form>
const form = document.getElementById('signup');
form.addEventListener('submit', async (event) => {
event.preventDefault();
const res = await fetch('/api/signup', { method: 'POST', body: new FormData(form) });
if (res.ok && 'PasswordCredential' in window) {
const cred = new PasswordCredential(form);
await navigator.credentials.store(cred);
console.log(`Konto für ${cred.name} (${cred.id}) gespeichert`);
}
});
Gespeicherte Zugangsdaten beim nächsten Besuch abrufen
const autoSignIn = async () => {
if (!('PasswordCredential' in window)) return null;
const cred = await navigator.credentials.get({
password: true,
mediation: 'optional'
});
if (cred instanceof PasswordCredential) {
console.log('Angemeldet als', cred.id);
return cred;
}
return null;
};
autoSignIn();
Fehlerfall: leeres Passwort
try {
new PasswordCredential({ id: 'max', password: '', origin: location.origin });
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- Browserunterstützung: Nur Chromium-basierte Browser (Chrome, Edge, Opera, Samsung Internet). Firefox und Safari kennen
PasswordCredentialnicht. Prüfen Sie die Unterstützung daher immer mit'PasswordCredential' in windowund bieten Sie das normale Formular als Rückfallebene an. - Sicherer Kontext: Funktioniert nur über HTTPS (oder
localhost). - Nur nach erfolgreicher Anmeldung speichern: Wer ungeprüfte Eingaben speichert, legt falsche Passwörter im Passwortmanager ab.
- Formular-Variante: Ohne passende
autocomplete-Attribute findet der Browser keine Werte, und der Konstruktor wirft einenTypeError. iconURLmuss eine sichere URL (HTTPS) sein, sonst gibt es einen Fehler.- Sicherheit: Das Objekt enthält das Passwort im Klartext in
cred.password. Nicht protokollieren und nicht an Dritt-Skripte weitergeben. Eine strenge CSP senkt das Risiko, dass per XSS eingeschleuster Code gespeicherte Zugangsdaten abruft. - Die früher genutzten Eigenschaften
idName,passwordNameundadditionalDatawurden entfernt. Senden Sie die Daten heute selbst perfetch(). - Für eine Anmeldung ohne Passwort sind Passkeys (
PublicKeyCredential/WebAuthn) die modernere Alternative.