Signatur
Beschreibung
Die Eigenschaft idpLoginUrl gehört zur WebRTC-Identity-Erweiterung von RTCPeerConnection. Mit dieser Erweiterung kann eine Verbindung eine kryptografisch gebundene Identitätszusicherung (Identity Assertion) eines externen Identity Providers enthalten. So kann die Gegenseite prüfen, wer wirklich am anderen Ende sitzt, auch wenn sie dem Signalisierungsserver nicht vertraut.
Um eine Zusicherung zu erzeugen, braucht der IdP oft eine angemeldete Sitzung des Benutzers. Fehlt diese, bricht der IdP-Proxy die Erzeugung mit dem Fehler "idp-need-login" ab. Der Browser setzt dann idpLoginUrl auf die Adresse, unter der sich der Benutzer beim IdP anmelden kann. Bis dahin (oder wenn keine Anmeldung nötig ist) hat die Eigenschaft den Wert null.
Ein typischer Ablauf sieht so aus: Mit setIdentityProvider() wird der IdP festgelegt, getIdentityAssertion() oder createOffer() lösen die Erzeugung der Zusicherung aus. Schlägt das mit Login-Bedarf fehl, öffnet die Anwendung idpLoginUrl in einem Pop-up oder iframe. Nach erfolgreicher Anmeldung wird die Zusicherung erneut angefordert.
Rückgabewert
null. Wird die Eigenschaft gar nicht unterstützt, ist sie undefined.Beispiele
Unterstützung prüfen und Wert auslesen
const pc = new RTCPeerConnection();
if ('idpLoginUrl' in pc) {
// Ohne gestartete Identitätsprüfung ist noch keine Login-URL vorhanden
console.log('idpLoginUrl:', pc.idpLoginUrl);
} else {
console.log('WebRTC Identity wird von diesem Browser nicht unterstützt.');
}
Login-Fenster öffnen, wenn der IdP eine Anmeldung verlangt
const pc = new RTCPeerConnection();
const holeZusicherung = async () => {
if (typeof pc.setIdentityProvider !== 'function') {
throw new Error('WebRTC Identity nicht verfügbar');
}
pc.setIdentityProvider('idp.example.com', { protocol: 'default', usernameHint: 'alice@example.com' });
try {
const assertion = await pc.getIdentityAssertion();
console.log('Zusicherung erhalten:', assertion);
} catch (err) {
if (err.errorDetail === 'idp-need-login' && pc.idpLoginUrl) {
// Pop-up muss aus einer Benutzeraktion heraus geöffnet werden
const fenster = window.open(pc.idpLoginUrl, 'idp-login', 'width=480,height=640');
console.log('Bitte beim IdP anmelden:', pc.idpLoginUrl);
return fenster;
}
throw err;
}
};
document.querySelector('#identitaet')?.addEventListener('click', () => {
holeZusicherung().catch((e) => console.error(e.message));
});
Nach der Anmeldung erneut versuchen
const pc = new RTCPeerConnection();
const mitLoginErneutVersuchen = async () => {
try {
return await pc.getIdentityAssertion();
} catch (err) {
if (err.errorDetail !== 'idp-need-login' || !pc.idpLoginUrl) throw err;
const fenster = window.open(pc.idpLoginUrl, 'idp-login');
// Warten, bis der Benutzer das Login-Fenster schließt
await new Promise((resolve) => {
const timer = setInterval(() => {
if (!fenster || fenster.closed) {
clearInterval(timer);
resolve();
}
}, 500);
});
return pc.getIdentityAssertion(); // zweiter Versuch
}
};
// Wichtig · Fallstricke
- Kompatibilität: WebRTC Identity ist experimentell. Nur Firefox hatte sie teilweise umgesetzt, Chrome, Edge und Safari unterstützen sie nicht. Für Produktivcode eignet sich die Eigenschaft deshalb kaum, prüfe vorher immer mit
'idpLoginUrl' in pc. - Der Wert ist
null, solange keine Zusicherung angefordert wurde oder keine Anmeldung nötig ist. Er wird erst gesetzt, nachdem ein Versuch mit"idp-need-login"gescheitert ist. - Sicherheit: Die URL kommt vom IdP-Proxy. Öffne sie nur in einem eigenen Fenster oder iframe und niemals als eingebettetes HTML. Vertraue ausschließlich IdPs, die du selbst mit
setIdentityProvider()konfiguriert hast. - Pop-up-Blocker lassen
window.open()meist nur als direkte Reaktion auf eine Benutzeraktion (z. B. einen Klick) zu. - Die Eigenschaft ist schreibgeschützt. Zuweisungen werden stillschweigend ignoriert, im Strict Mode wird ein
TypeErrorausgelöst.