Signatur
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();
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.');
}
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}!`);
// Wichtig · Fallstricke
- Kompatibilität: Die WebRTC-Identity-API ist experimentell und wurde nur in Firefox umgesetzt. Chrome, Edge und Safari unterstützen weder
RTCIdentityAssertionnochpeerIdentity. 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:
namegibt es erst, wenn das Promisepc.peerIdentityerfü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:
nameist nur so vertrauenswürdig wie der IdP inidp. Prüfe immer beide Werte gemeinsam, statt nur den Benutzernamen anzuzeigen. - Sicherheit (XSS): Den Wert per
textContentausgeben, nicht perinnerHTML. Ein bösartiger IdP könnte manipulierte Zeichenketten liefern.