Start · Sprachen · JavaScript · Referenz · RTCIdentityAssertion.name

RTCIdentityAssertion.name

Eigenschaft

Gibt die vom Identitätsanbieter (IdP) verifizierte Identität des entfernten Peers als Zeichenkette im Format <code>benutzer@domain</code> zurück.

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

Signatur

RTCIdentityAssertion.name

Beschreibung

Die Eigenschaft name eines RTCIdentityAssertion-Objekts enthält die Identität des entfernten Teilnehmers einer WebRTC-Verbindung, nachdem ein Identitätsanbieter (Identity Provider, IdP) sie geprüft hat. Der Wert hat die Form einer E-Mail-ähnlichen Adresse nach RFC 5322 (addr-spec), zum Beispiel alice@example.org. Der Domain-Teil entspricht in der Regel der Domain des IdP.

Ein RTCIdentityAssertion erzeugt man nicht selbst. Man erhält es über das Promise RTCPeerConnection.peerIdentity. Dieses Promise wird erfüllt, sobald der Browser die Identitätsbestätigung (Identity Assertion) aus der entfernten SDP-Beschreibung beim IdP erfolgreich geprüft hat. Zusammen mit RTCIdentityAssertion.idp, der Domain des prüfenden Anbieters, lässt sich damit Ende-zu-Ende nachvollziehen, mit wem man tatsächlich verbunden ist, und zwar unabhängig vom Signalisierungsserver.

Einsatzbereich sind Anwendungen, in denen der Signalisierungskanal nicht vertrauenswürdig ist, etwa föderierte Chat-Dienste. Dort kann man anzeigen: „Verbunden mit alice@example.org (bestätigt durch example.org)“. Die Eigenschaft ist schreibgeschützt.

Beispiele

Verifizierte Peer-Identität nach dem Verbindungsaufbau auslesen

const pc = new RTCPeerConnection();
// IdP für die eigene Identität festlegen (nur Firefox)
pc.setIdentityProvider('example.org', { protocol: 'default', usernameHint: 'bob' });

// ... Offer/Answer über den Signalisierungskanal austauschen ...

const showPeer = async () => {
  try {
    const assertion = await pc.peerIdentity;
    console.log(`Verbunden mit ${assertion.name} (IdP: ${assertion.idp})`);
  } catch (err) {
    console.error('Identität konnte nicht verifiziert werden:', err);
  }
};
showPeer();
Verbunden mit alice@example.org (IdP: example.org)

Funktion erkennen, bevor man sie nutzt

const supportsIdentity = 'peerIdentity' in RTCPeerConnection.prototype;

if (!supportsIdentity) {
  console.warn('WebRTC Identity wird von diesem Browser nicht unterstützt.');
} else {
  console.log('WebRTC Identity verfügbar.');
}
WebRTC Identity wird von diesem Browser nicht unterstützt.

Identität gegen erwarteten Gesprächspartner prüfen

const verifyPeer = async (pc, expected) => {
  const { name, idp } = await pc.peerIdentity;
  const [user, domain] = name.split('@');
  if (name !== expected || domain !== idp) {
    pc.close();
    throw new Error(`Unerwartete Identität: ${name}`);
  }
  return user;
};

// Aufruf, z. B. nach setRemoteDescription():
// const user = await verifyPeer(pc, 'alice@example.org');
// console.log(`Hallo ${user}!`);
Hallo alice!

// Wichtig · Fallstricke

  • Kompatibilität: Die WebRTC-Identity-API ist experimentell und wurde nur in Firefox umgesetzt. Chrome, Edge und Safari unterstützen weder RTCIdentityAssertion noch peerIdentity. Für Produktivcode braucht man Funktionserkennung und einen Ersatzweg, etwa eine eigene Authentifizierung über den Signalisierungskanal oder DTLS-Fingerprint-Vergleich.
  • Nur nach erfolgreicher Prüfung verfügbar: name gibt es erst, wenn das Promise pc.peerIdentity erfüllt wurde. Liefert der Peer keine gültige Identitätsbestätigung, bleibt das Promise offen oder wird abgelehnt. Man sollte daher ein Timeout einbauen.
  • Vertrauen: name ist nur so vertrauenswürdig wie der IdP in idp. Prüfe immer beide Werte gemeinsam, statt nur den Benutzernamen anzuzeigen.
  • Sicherheit (XSS): Den Wert per textContent ausgeben, nicht per innerHTML. Ein bösartiger IdP könnte manipulierte Zeichenketten liefern.