Start · Sprachen · JavaScript · Referenz · IdentityCredentialError.url

IdentityCredentialError.url

Eigenschaft

Schreibgeschützte Zeichenkette mit einer URL des Identitätsanbieters, die für Nutzer lesbare Informationen zum aufgetretenen FedCM-Anmeldefehler enthält.

seit JavaScript Experimentell: Chromium-Browser (Chrome/Edge ab ca Kategorie: webapi

Signatur

IdentityCredentialError.url

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

Typ
string
Beschreibung
Eine absolute URL als Zeichenkette, die auf eine für Menschen lesbare Fehlerseite des Identitätsanbieters verweist, oder "", 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();
Fehlercode: access_denied Hilfe-URL: https://idp.example/fehler?grund=access_denied

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');
}
IdentityCredentialError https://idp.example/hilfe/client

// Wichtig · Fallstricke

  • Kompatibilität: Die Eigenschaft ist experimentell und steht nur in Chromium-Browsern zur Verfügung. Prüfe vorher mit 'IdentityCredentialError' in window und sieh eine Ausweichlösung vor, etwa eine klassische Weiterleitung per OAuth.
  • Leerer Wert: Liefert der IdP keine URL, ist url eine leere Zeichenkette, nicht null. Prüfe den Wert vor dem Einbinden.
  • Sicherheit: Der Wert kommt von einem fremden Server. Setze ihn nie ungeprüft per innerHTML ein und lass nur http:/https: zu, um javascript:-URLs und XSS zu verhindern. Öffne externe Links mit rel="noopener noreferrer".
  • Nach der Spezifikation muss die URL denselben Ursprung wie die configURL des IdP haben. Ist das nicht der Fall, verwirft der Browser sie womöglich.
  • Nicht jeder Fehler von navigator.credentials.get() ist ein IdentityCredentialError. Ein Abbruch durch den Nutzer oder fehlende Berechtigungen führen meist zu einer DOMException (z. B. NetworkError oder AbortError), die keine url hat.