Start · Sprachen · JavaScript · Referenz · RTCPeerConnection.getIdentityAssertion()

RTCPeerConnection.getIdentityAssertion()

Methode

Startet das Einholen einer Identitätsbehauptung beim konfigurierten Identity Provider und gibt ein Promise mit der kodierten Behauptung zurück.

seit JavaScript Experimentell – nur Firefox (WebRTC Identity) Kategorie: webapi

Signatur

RTCPeerConnection.prototype.getIdentityAssertion()

Beschreibung

Die Methode getIdentityAssertion() gehört zur Schnittstelle RTCPeerConnection. Sie fordert beim Identity Provider (IdP) eine Identitätsbehauptung an. Den IdP legt man vorher mit setIdentityProvider() fest. Die Behauptung wird an den DTLS-Fingerabdruck der Verbindung gebunden. So kann die Gegenseite prüfen, dass die Medienverbindung wirklich zu einer bestimmten Identität gehört, etwa alice@example.com, und nicht nur zu einem anonymen Endpunkt.

Normalerweise ruft der Browser die Behauptung bei createOffer() oder createAnswer() automatisch ab und fügt sie als a=identity-Attribut in die SDP ein. Mit getIdentityAssertion() startet man diesen Vorgang vorzeitig. Das ist praktisch, wenn der Nutzer sich zuerst beim IdP anmelden muss (Login-Dialog) oder wenn Fehler früh auffallen sollen, noch bevor die Signalisierung beginnt.

Die Methode wirkt nur, wenn der signalingState der Verbindung nicht "closed" ist. Schlägt die Anmeldung beim IdP fehl, stehen Details in idpLoginUrl und idpErrorInfo. Auf der Gegenseite liefert peerIdentity die geprüfte Identität.

Rückgabewert

Typ
Promise<string>
Beschreibung
Ein Promise, das mit der vom IdP erzeugten, kodierten Identitätsbehauptung als string erfüllt wird. Das Promise wird abgelehnt, wenn kein IdP gesetzt ist, der IdP einen Fehler meldet oder eine Anmeldung nötig ist (z. B. mit einem RTCError, dessen errorDetail den Wert "idp-need-login" hat).

Beispiele

Identitätsbehauptung vorab einholen

const pc = new RTCPeerConnection();

// Identity Provider festlegen (Domain, Protokoll, Benutzername-Hinweis)
pc.setIdentityProvider('idp.example.com', {
  protocol: 'default',
  usernameHint: 'alice@example.com'
});

try {
  const assertion = await pc.getIdentityAssertion();
  console.log('Behauptung erhalten, Länge:', assertion.length);
} catch (err) {
  console.error('IdP-Fehler:', err.name, err.message);
}
Behauptung erhalten, Länge: 812

Login beim IdP behandeln

const pc = new RTCPeerConnection();
pc.setIdentityProvider('idp.example.com');

const ensureIdentity = async () => {
  try {
    return await pc.getIdentityAssertion();
  } catch (err) {
    // IdP verlangt eine Anmeldung: Login-Fenster öffnen
    if (err.errorDetail === 'idp-need-login' && pc.idpLoginUrl) {
      window.open(pc.idpLoginUrl, 'idp-login', 'width=500,height=600');
      console.log('Bitte beim IdP anmelden und erneut versuchen.');
    } else {
      console.error('Fehlerdetails:', pc.idpErrorInfo);
    }
    return null;
  }
};

const assertion = await ensureIdentity();
Bitte beim IdP anmelden und erneut versuchen.

Funktionsprüfung vor der Nutzung

const supportsIdentity =
  typeof RTCPeerConnection !== 'undefined' &&
  'getIdentityAssertion' in RTCPeerConnection.prototype;

if (supportsIdentity) {
  const pc = new RTCPeerConnection();
  pc.setIdentityProvider('idp.example.com');
  pc.getIdentityAssertion()
    .then(() => console.log('Identität bereit'))
    .catch((e) => console.warn('Keine Identität:', e.message));
} else {
  console.log('WebRTC-Identity wird nicht unterstützt – Fallback auf App-eigene Authentifizierung.');
}
WebRTC-Identity wird nicht unterstützt – Fallback auf App-eigene Authentifizierung.

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Die Methode stammt aus der Spezifikation Identity for WebRTC und ist experimentell. Nur Firefox hat sie implementiert. Chrome, Edge und Safari kennen sie nicht. Prüfe vor dem Aufruf, ob die Methode vorhanden ist (Feature Detection).
  • Ohne vorheriges setIdentityProvider() wird das Promise abgelehnt.
  • Ist signalingState gleich "closed", hat der Aufruf keine Wirkung.
  • Der IdP läuft in einer abgeschotteten Umgebung, geladen über https://<idp-domain>/.well-known/idp-proxy/<protocol>. Die Seite braucht also einen sicheren Kontext (HTTPS), und der IdP muss diesen Endpunkt bereitstellen.
  • Sicherheit: Die Behauptung belegt nur die Identität, die der IdP bestätigt. Wie vertrauenswürdig sie ist, hängt vollständig vom IdP ab. Die Prüfung auf der Gegenseite (peerIdentity) ersetzt keine Autorisierung in der Anwendung.