Start · Sprachen · JavaScript · Referenz · IdentityCredential.disconnect()

IdentityCredential.disconnect()

Methode

Die statische Methode trennt ein föderiertes Anmeldekonto zwischen Relying Party (RP) und Identity Provider (IdP), das zuvor über FedCM verbunden wurde.

seit JavaScript Experimentell: Chrome/Edge 122+ (FedCM), nicht in Kategorie: webapi

Signatur

IdentityCredential.disconnect(options)

Beschreibung

IdentityCredential.disconnect() gehört zur Federated Credential Management API (FedCM). Mit der Methode nimmt eine Website (die Relying Party, kurz RP) die Verbindung zu einem Konto zurück, das der Nutzer früher über navigator.credentials.get({ identity: … }) bei einem Identity Provider (IdP) genehmigt hat. Das entspricht einem „Konto trennen“ oder „Anmeldung mit … entfernen“ in den Kontoeinstellungen einer Website.

Beim Aufruf schickt der Browser eine POST-Anfrage an den disconnect_endpoint, den der IdP in seiner Konfigurationsdatei (configURL) angibt. Die Anfrage enthält die Cookies des IdP und die Formularfelder client_id und account_hint. Der IdP trennt daraufhin das Konto und antwortet mit JSON im Format { "account_id": "…" }. Außerdem löscht der Browser seinen internen Vermerk, dass das Konto mit dieser RP verbunden ist. Beim nächsten Login erscheint deshalb wieder der vollständige Zustimmungsdialog und keine automatische Wiederanmeldung.

Nutzen Sie die Methode, wenn Nutzer die Verknüpfung mit einem IdP ausdrücklich aufheben wollen, etwa in den Datenschutz- oder Kontoeinstellungen. Mit dem Abmelden aus der Sitzung hat sie nichts zu tun. Dafür ist navigator.credentials.preventSilentAccess() gedacht, oder Sie beenden einfach die eigene Sitzung.

Parameter

Name Typ Default Beschreibung
$options Pflicht Object Konfigurationsobjekt mit den folgenden Eigenschaften (alle Pflicht).
$options.configURL Pflicht string URL der IdP-Konfigurationsdatei (z. B. https://idp.example/fedcm.json). Diese Datei muss einen disconnect_endpoint enthalten.
$options.clientId Pflicht string Client-ID, die der IdP der RP zugewiesen hat. Es muss dieselbe sein wie bei der Anmeldung.
$options.accountHint Pflicht string Hinweis auf das zu trennende Konto: eine Konto-ID oder ein Wert aus dem Array approved_clients bzw. login_hints, das der IdP im Accounts-Endpunkt liefert. Mit "*" kann der IdP bei Bedarf alle Konten trennen.

Rückgabewert

Typ
Promise<undefined>
Beschreibung
Ein Promise, das mit undefined erfüllt wird, sobald die Trennung erfolgreich war. Es wird mit einer DOMException abgelehnt (meist NetworkError), wenn der IdP nicht erreichbar ist, kein disconnect_endpoint existiert, die Antwort ungültig ist oder die Berechtigungsrichtlinie den Aufruf blockiert.

Beispiele

Konto in den Einstellungen trennen

const disconnectIdP = async (accountId) => {
  try {
    await IdentityCredential.disconnect({
      configURL: 'https://idp.example/fedcm.json',
      clientId: 'rp-client-123',
      accountHint: accountId
    });
    console.log('Konto erfolgreich getrennt');
  } catch (err) {
    console.error('Trennen fehlgeschlagen:', err.name, err.message);
  }
};

document.querySelector('#disconnect-btn')
  .addEventListener('click', () => disconnectIdP('user-4711'));
Konto erfolgreich getrennt

Feature-Erkennung mit Rückfall

const unlinkAccount = async ({ configURL, clientId, accountHint }) => {
  if (typeof IdentityCredential === 'undefined' ||
      typeof IdentityCredential.disconnect !== 'function') {
    // Rückfall: Trennung serverseitig über die eigene API anstoßen
    await fetch('/api/unlink-idp', { method: 'POST', credentials: 'include' });
    return 'server-fallback';
  }
  await IdentityCredential.disconnect({ configURL, clientId, accountHint });
  return 'fedcm';
};

const result = await unlinkAccount({
  configURL: 'https://idp.example/fedcm.json',
  clientId: 'rp-client-123',
  accountHint: 'user-4711'
});
console.log(result);
fedcm

Anmelden und später wieder trennen

const config = {
  configURL: 'https://idp.example/fedcm.json',
  clientId: 'rp-client-123'
};

// 1. Anmeldung über FedCM
const credential = await navigator.credentials.get({
  identity: { providers: [{ ...config, nonce: crypto.randomUUID() }] }
});
const { accountId } = await fetch('/api/verify-token', {
  method: 'POST',
  body: credential.token
}).then((r) => r.json());

// 2. Später: Verknüpfung aufheben
await IdentityCredential.disconnect({ ...config, accountHint: accountId });
console.log(`Konto ${accountId} getrennt`);
Konto user-4711 getrennt

// Wichtig · Fallstricke

  • Browser-Unterstützung: Die Methode ist experimentell. Sie ist nur in Chromium-Browsern verfügbar (ab Chrome/Edge 122) und nicht in Firefox oder Safari. Prüfen Sie deshalb immer vorher, ob sie vorhanden ist.
  • Sicherer Kontext: Die Methode funktioniert nur über HTTPS (oder localhost).
  • Berechtigungsrichtlinie: In einem <iframe> muss die Richtlinie identity-credentials-get erlaubt sein, z. B. mit <iframe allow="identity-credentials-get">. Sonst wird das Promise abgelehnt.
  • Anforderungen an den IdP: Die Konfigurationsdatei muss einen disconnect_endpoint enthalten. Der Endpunkt muss CORS mit Anmeldedaten unterstützen (Access-Control-Allow-Origin mit dem RP-Origin, Access-Control-Allow-Credentials: true). Außerdem sollte er den Header Sec-Fetch-Dest: webidentity prüfen, um CSRF-Angriffe abzuwehren.
  • Kein Logout: Die Methode beendet keine Sitzung, weder bei der RP noch beim IdP. Die eigene Sitzung und die serverseitig gespeicherte Verknüpfung müssen Sie selbst entfernen.
  • Fehlerdetails: Aus Datenschutzgründen sind die Fehlermeldungen absichtlich allgemein gehalten (NetworkError). Sie verraten nicht, ob das Konto existiert.