Start · Sprachen · JavaScript · Referenz · RTCPeerConnection.idpLoginUrl

RTCPeerConnection.idpLoginUrl

Eigenschaft

Schreibgeschützte Eigenschaft, die die Login-URL des Identity Providers (IdP) liefert, falls sich der Benutzer für eine Identitätszusicherung erst anmelden muss – sonst <code>null</code>.

seit JavaScript Experimentell (WebRTC Identity); nur zeitweise in Kategorie: webapi

Signatur

RTCPeerConnection.idpLoginUrl

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

Typ
string | null
Beschreibung
Die Login-URL des IdP als String, wenn der letzte Versuch, eine Identitätszusicherung zu erzeugen, eine Anmeldung verlangt hat. Sonst 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.');
}
idpLoginUrl: null // bzw. in den meisten Browsern: // 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));
});
Bitte beim IdP anmelden: https://idp.example.com/login?...

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 TypeError ausgelöst.