Signatur
Beschreibung
Die Eigenschaft url gehört zum Interface IdentityCredentialError der Federated Credential Management API (FedCM). Ein solcher Fehler wird ausgelöst, wenn navigator.credentials.get({ identity: … }) fehlschlägt, weil der Identitätsanbieter (IdP) an seinem ID-Assertion-Endpunkt statt eines Tokens ein Fehlerobjekt zurückgibt, etwa {"error": {"code": "access_denied", "url": "https://idp.example/fehler"}}.
url enthält die vom IdP gelieferte Adresse einer Seite, auf der Nutzer erfahren, was schiefgelaufen ist und wie sie das Problem beheben können, zum Beispiel ein gesperrtes Konto freischalten oder fehlende Einwilligungen erteilen. Hat der IdP keine URL mitgeschickt, ist der Wert eine leere Zeichenkette.
Verwende die Eigenschaft, wenn du im catch-Block einer FedCM-Anmeldung eine eigene Fehlermeldung mit weiterführendem Link anzeigen willst. Zusammen mit IdentityCredentialError.error (dem maschinenlesbaren Fehlercode) lässt sich so auf die Fehlerursache eingehen. Beachte, dass der Browser selbst oft schon einen Fehlerdialog mit einem Link „Weitere Informationen“ auf diese URL anzeigt.
Rückgabewert
"", wenn keine URL übermittelt wurde.Beispiele
Fehler bei der FedCM-Anmeldung abfangen und URL auslesen
const anmelden = async () => {
try {
const credential = await navigator.credentials.get({
identity: {
providers: [{
configURL: 'https://idp.example/fedcm.json',
clientId: 'meine-client-id',
nonce: crypto.randomUUID()
}]
}
});
console.log('Token:', credential.token);
} catch (err) {
if (err instanceof IdentityCredentialError) {
console.log('Fehlercode:', err.error);
console.log('Hilfe-URL:', err.url || '(keine)');
} else {
console.error('Anderer Fehler:', err);
}
}
};
anmelden();
Hilfe-Link sicher in der Oberfläche anzeigen
const zeigeHilfeLink = (err, container) => {
if (!err.url) return;
let ziel;
try {
ziel = new URL(err.url);
} catch {
return; // ungültige URL ignorieren
}
// Nur http(s) zulassen, keine javascript:-URLs
if (!['https:', 'http:'].includes(ziel.protocol)) return;
const link = document.createElement('a');
link.href = ziel.href;
link.textContent = 'Was ist passiert? Mehr erfahren';
link.target = '_blank';
link.rel = 'noopener noreferrer';
container.append(link);
};
// Nutzung im catch-Block:
// zeigeHilfeLink(err, document.querySelector('#login-fehler'));
Fehlerobjekt selbst erzeugen (z. B. für Tests)
if ('IdentityCredentialError' in window) {
const fehler = new IdentityCredentialError('Anmeldung abgelehnt', {
error: 'unauthorized_client',
url: 'https://idp.example/hilfe/client'
});
console.log(fehler.name);
console.log(fehler.url);
} else {
console.log('FedCM-Fehler-API wird nicht unterstützt');
}
// Wichtig · Fallstricke
- Kompatibilität: Die Eigenschaft ist experimentell und steht nur in Chromium-Browsern zur Verfügung. Prüfe vorher mit
'IdentityCredentialError' in windowund sieh eine Ausweichlösung vor, etwa eine klassische Weiterleitung per OAuth. - Leerer Wert: Liefert der IdP keine URL, ist
urleine leere Zeichenkette, nichtnull. Prüfe den Wert vor dem Einbinden. - Sicherheit: Der Wert kommt von einem fremden Server. Setze ihn nie ungeprüft per
innerHTMLein und lass nurhttp:/https:zu, umjavascript:-URLs und XSS zu verhindern. Öffne externe Links mitrel="noopener noreferrer". - Nach der Spezifikation muss die URL denselben Ursprung wie die
configURLdes IdP haben. Ist das nicht der Fall, verwirft der Browser sie womöglich. - Nicht jeder Fehler von
navigator.credentials.get()ist einIdentityCredentialError. Ein Abbruch durch den Nutzer oder fehlende Berechtigungen führen meist zu einerDOMException(z. B.NetworkErroroderAbortError), die keineurlhat.