Signatur
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
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);
}
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();
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.');
}
// 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
signalingStategleich"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.