Signatur
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
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'));
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);
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`);
// 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 Richtlinieidentity-credentials-geterlaubt sein, z. B. mit<iframe allow="identity-credentials-get">. Sonst wird das Promise abgelehnt. - Anforderungen an den IdP: Die Konfigurationsdatei muss einen
disconnect_endpointenthalten. Der Endpunkt muss CORS mit Anmeldedaten unterstützen (Access-Control-Allow-Originmit dem RP-Origin,Access-Control-Allow-Credentials: true). Außerdem sollte er den HeaderSec-Fetch-Dest: webidentityprü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.