Diese Seite wurde automatisch übersetzt. Lesen Sie die englische Originalversion hier.

Passkeys-Cheatsheet. Praxisnahe Leitfäden, Rollout-Muster und KPIs für Passkey-Programme.
navigator.userAgentData, sodass Entwickler bei Mozillas Browser auf das klassische Parsen von User-Agent-Strings zurückgreifen müssen.getHighEntropyValues() greift auf hochgradig entropische Gerätedaten zu, dies jedoch nur in Chromium-Browsern. Safari und Firefox fehlt diese API vollständig.Die Methoden zur Erkennung von und Reaktion auf unterschiedliche Benutzerumgebungen ändern sich ständig. Traditionell waren User-Agent-Strings das Mittel der Wahl, um Browser- und Geräteinformationen zu identifizieren, sodass Websites das Benutzererlebnis entsprechend anpassen konnten. Allerdings wurden diese Strings oft für das Fingerprinting und die Identifizierung von Benutzern ohne deren Zustimmung für Marketingzwecke verwendet, was Datenschutzbedenken aufwarf.
In diesem Zusammenhang sind Client Hints als JavaScript-APIs als ein Werkzeug entstanden, das eine kontrolliertere und datenschutzfreundlichere Möglichkeit bietet, notwendige Informationen über das Gerät und die Präferenzen des Benutzers zu teilen. Dieser Artikel konzentriert sich auf die Konsequenzen der User-Agent-Reduzierung und untersucht, wie Client Hints dabei helfen, sich an diese neue Situation anzupassen.
Wichtige Punkte, die wir ansprechen werden:
Da Browser und Betriebssysteme unterschiedliche Positionen einnehmen und ihre Ansätze unterschiedlich anpassen, stehen Softwareentwickler vor der Herausforderung sicherzustellen, dass ihre Anwendungen verschiedene Benutzerumgebungen über alle Browser und Betriebssysteme hinweg weiterhin genau erkennen und darauf reagieren können.
Dieser Artikel zielt darauf ab, einen umfassenden Überblick über diese Änderungen zu geben und bietet Einblicke und praktische Anleitungen für Entwickler, falls deren Anwendungsfall oder Software von Geräte- oder Betriebssystemdetails abhängt (z. B. detailliertes Gerätemanagement, Erkennung bekannter Geräte, Betrugsprävention oder andere Funktionserkennungen) oder wie in unserem eigenen Fall, um das Passkey-Erlebnis mit User-Agents und Client Hints zu optimieren.
Aktuelle Artikel
📖
Parallels Passkeys: Testen von Cross-Device Authentication auf einer Windows 11 VM (Mac)
⚙️
9 WebAuthn-Server-Implementierungsbibliotheken im Vergleich
⚙️
Client Hints & User-Agents in Chrome, Safari & Firefox
⚙️
Passkeys Cheat Sheet für Entwickler
👤
So löschen Sie einen Passkey auf Apple, Windows und Android
Bevor wir in die technischen Details zu Client Hints eintauchen, werden wir kurz die Geschichte des User-Agents erkunden und uns ansehen, wie die verschiedenen Bemühungen zur User-Agent-Reduzierung funktionieren.
Die Geschichte der User-Agent-Strings lässt sich bis zu den Anfängen der ersten Webbrowser zurückverfolgen. Tim Berners-Lee entwickelte 1990 den ersten Webbrowser, WorldWideWeb (später in Nexus umbenannt). Diesem folgten bald weitere wegweisende Browser wie der Line Mode Browser 1991, und anschließend erschienen Browser wie MidasWWW, ViolaWWW, Erwise und Cello.
Im Jahr 1993 wurde die Veröffentlichung von NCSA Mosaic, oft einfach Mosaic genannt, für den anfänglichen Popularitätsschub des Webs verantwortlich gemacht. Der User-Agent-String von Mosaic war recht unkompliziert, typischerweise formatiert als NCSA_Mosaic/1.0, bestehend aus dem Produktnamen gefolgt von einem optionalen Schrägstrich und der Versionsnummer.
Ursprünglich wurde das User-Agent-Feld für Analysezwecke und zur Identifizierung von Problemen eingeführt. Es wurde ausdrücklich empfohlen, dass dieses Feld in HTTP-Anfragen "enthalten sein sollte", wie im W3C HTTP-Archiv von 1992 vermerkt ist. Dieses unkomplizierte Feld bot eine einfache, aber effektive Möglichkeit, den Produktnamen und die Version zu übermitteln, was beim Verständnis und der Behebung von browserbezogenen Problemen half.
Mit der Entwicklung des Webs nahm auch die Komplexität und Nutzung von User-Agent-Strings zu. Sie wurden detaillierter und begannen, eine Fülle von Informationen über den Browser, das Betriebssystem und das Gerät aufzunehmen. Während diese Informationen für Webanalysen und die Optimierung des Benutzererlebnisses wertvoll waren, brachten sie auch erhebliche Datenschutzbedenken mit sich. Detaillierte User-Agent-Strings ermöglichten das Geräte-Fingerprinting, was es Werbetreibenden und Trackern erlaubte, eindeutige Profile von Benutzern zu erstellen und deren Online-Aktivitäten über verschiedene Websites hinweg zu verfolgen.
In der modernen Ära, in der Datenschutz für Benutzer und Regulierungsbehörden gleichermaßen ein wichtiges Anliegen geworden ist, wurde die Detailliertheit von User-Agent-Strings zunehmend als problematisch angesehen. Diese Erkenntnis hat zu Bemühungen geführt, die Granularität von User-Agent-Strings zu reduzieren, mit dem Ziel, ein Gleichgewicht zwischen der Bereitstellung notwendiger Informationen für die Webfunktionalität und dem Schutz der Privatsphäre der Benutzer zu finden. Dieser Übergang markiert den Beginn der User-Agent-Reduzierung, einer Bewegung hin zur Minimierung der in User-Agent-Strings geteilten Informationen, um Datenschutzrisiken zu mindern und die Sicherheit zu erhöhen.
Die Bewegung zur User-Agent-Reduzierung begann als Reaktion auf wachsende Datenschutzbedenken. Hier ist eine chronologische Übersicht der wichtigsten Meilensteine dieser Entwicklung:
Im Jahr 2017 leitete Apple die Bewegung zur User-Agent-Reduzierung mit einem berühmten Twitter-Post (hier auf X (ehemals Twitter)) ein, in dem angekündigt wurde, dass Safari den User-Agent-String in Safari Technology Preview 46 (STP 46) einfrieren würde, um Fingerprinting zu bekämpfen und den Datenschutz zu verbessern.
Diese Entscheidung wurde jedoch später im Jahr 2021 aufgrund erheblicher Kompatibilitätsprobleme mit Websites, die auf aktuelle User-Agent-Informationen angewiesen waren, teilweise revidiert.
In den Jahren 2019/2020 kündigte Google Pläne an, die Granularität von User-Agent-Strings in Chrome zu reduzieren (siehe hier) und führte User-Agent Client Hints (UA-CH) als flexible und kontrollierte Möglichkeit ein, spezifische Browser- und Geräteinformationen anzufordern. Google begann, die User-Agent-Reduzierung in Chrome Canary- und Beta-Versionen zu testen, sammelte Feedback, um Kompatibilität und Funktionalität sicherzustellen, und die Reduzierung wurde 2023 abgeschlossen für Android und alle anderen Chrome-Plattformen. Gleichzeitig führte Chrome Client Hints ein, als neue Möglichkeit, auf diese Informationen zuzugreifen. Da Microsoft Edge auf Chromium basiert, verhält sich Microsoft Edge auf allen Plattformen wie Chrome.
Im Jahr 2021 schloss sich Mozilla der Initiative an und reduzierte allmählich die Granularität des User-Agent-Strings, entschied sich jedoch dafür, Client Hints in Firefox nicht zu unterstützen.
User-Agent-Reduzierung variiert je nach Browser: Chromium (Chrome, Edge) hat eine vollständige UA-Reduzierung mit Unterstützung für Client Hints implementiert. Safari nutzt jedoch seinen eigenen Ansatz mit eingefrorenen UAs ohne UA-CH zu übernehmen, und Firefox hat navigator.userAgentData nicht implementiert. Das Ökosystem bleibt zersplittert.
Client Hints haben sich in Chromium weiterentwickelt: Alle Browser senden weiterhin einen User-Agent-Header, aber bei den meisten ist dieser auf eine ältere Version eingefroren (siehe Tabelle unten). Für Chromium können Client Hints verwendet werden, um mehr Informationen zu erhalten.
Lassen Sie uns im folgenden Kapitel ansehen, was Browser derzeit als User-Agents senden.
Abonnieren Sie unseren Passkeys Substack für aktuelle News.
Wenn von User-Agent-Reduzierung die Rede ist, ist damit gemeint, die Informationen innerhalb des User-Agent-Strings zu reduzieren. Lassen Sie uns tiefer eintauchen, um herauszufinden, was vor der Reduzierung im User-Agent eingebettet war.
Ein klassischer User-Agent-String enthielt typischerweise die folgenden Komponenten, die zur Erkennung von Funktionen verwendet werden konnten:
Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.2.1.0 Mobile Safari/537.36
Historisch gesehen wurden User-Agent-Strings oft für die Funktions- und Plattformerkennung verwendet, wodurch Websites ihre Inhalte und Funktionen basierend auf den erkannten Browser- und Geräteeigenschaften anpassen konnten (z. B. um zu bestimmen, welcher Download für ein bestimmtes Binary angeboten werden soll). Dies wurde besonders wichtig mit dem Aufkommen von Mobiltelefonen und Tablets für Layouts, die nicht responsiv aufgebaut waren, um Mobiltelefone auf ihre spezifische Version umzuleiten.
Dieser Ansatz wird nun jedoch als suboptimal angesehen, da er auf Annahmen über Browser-Fähigkeiten beruht, die möglicherweise nicht zutreffen oder nicht spezifisch genug sind. Moderne Webentwicklungspraktiken befürworten, wo immer möglich, die Funktionserkennung über Browser-APIs zu nutzen, um direkt auf spezifische Browser-Funktionen und -Fähigkeiten zu prüfen. Diese Methode ist zuverlässiger und stellt sicher, dass Websites unabhängig vom User-Agent-String oder der Browser-Version korrekt funktionieren. Die Funktionserkennung konzentriert sich auf die tatsächlichen Fähigkeiten des Browsers und bietet eine robustere und zukunftssicherere Möglichkeit, Unterschiede im Verhalten und in der Funktionalität von Browsern zu handhaben.
Bis heute ist dies nicht vollständig möglich, da neue Browser-APIs zur Erkennung von Funktionen zu unterschiedlichen Zeiten implementiert werden und es oft einen unterschiedlichen Ansatz zwischen den größeren (z. B. Chromium-basierten Browsern) und kleineren Browser-Teams (z. B. Firefox) gibt.
Mehr Informationen geben einer Website eine größere Möglichkeit, einen Fingerabdruck mit mehr "Entropie" zu erstellen. Entropie ist in diesem Zusammenhang das Maß an Variation, das verwendet werden kann, um einen eindeutigen Fingerabdruck unter den verschiedenen Besuchern einer Website zu generieren.
Ein Fingerabdruck kann für verschiedene Zwecke verwendet werden. Er kann zu Schutzzwecken eingesetzt werden, wie z. B. zur Aufdeckung von Betrug und zur Verhinderung von Kontoübernahmen durch Identifizierung neuer Geräte, aber er kann auch dazu verwendet werden, Besucher ohne deren Zustimmung zu identifizieren oder für ein spezifischeres Ad-Targeting.
Im Kontext von User-Agent-Strings bezieht sich Entropie auf die Menge an eindeutigen, identifizierbaren Informationen, die verwendet werden können, um einzelne Benutzer zu tracken und zu unterscheiden.
Es gibt viele weitere Informationen, die als Entropiequelle neben dem User-Agent verwendet werden können. Verschiedene Entropiequellen finden Sie beispielsweise auf https://coveryourtracks.eff.org.
Wenn Browser also von der User-Agent-Reduzierung sprechen, zielen sie in erster Linie darauf ab, die Informationen mit hoher Entropie zu reduzieren. Hier sind verschiedene Beispiele für die Reduzierung:
Im Folgenden finden Sie ein Beispiel für die User-Agent-Reduzierung von Googles Chrome auf einem Android-Handy:
Vorher:
Mozilla/5.0 (Linux; Android <span style={{color: '#016F01' }}>13; Pixel 7</span>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
Nachher:
Mozilla/5.0 (Linux; Android <span style={{color: '#016F01' }}>10; K</span>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
Das Format des User-Agents blieb unverändert, um bestehende Parsing-Logik von Bibliotheken nicht zu stören. Die folgenden Werte wurden reduziert:
Die Grafik zeigt detailliert, welche Werte weiterhin basierend auf dem Betriebssystem aktualisiert werden, und die grünen Werte zeigen, welche Werte auf allen Plattformen konstant bleiben. Für verschiedene Betriebssystemwerte wird es nur noch eine Variante geben, die konstant bleibt:
| Betriebssystem | Reduzierter/fester Name |
|---|---|
| Mac | Macintosh; Intel Mac OS X 10_15_7 |
| Windows | Windows NT 10.0; Win64; x64 |
| ChromeOS | X11; CrOS x86_64 14541.0.0 |
| Linux | X11; Linux x86_64 |
| Android | Linux; Android 10; K |
| iOS | reduziert (iOS 26+) |
Im Folgenden finden Sie ein Beispiel für die User-Agent-Reduzierung von Mozilla Firefox, die in den meisten Punkten Googles Positionen zur User-Agent-Reduzierung folgt.
Hier ist ein Beispiel für einen User-Agent unter Windows 11 mit einer aktuellen Firefox-Version:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0
In diesem User-Agent wurden die CPU-Architektur, die Betriebssystemversion und die Browser-Minor-Version eingefroren.
Im Folgenden finden Sie ein Beispiel für eine Safari User-Agent-Reduzierung unter macOS.
Beginnen wir zunächst mit einem Safari User-Agent unter macOS Sonoma Version 14.5 auf einem Mac Silicon M2.
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15
Sie können sehen, dass die macOS-Version auf 10_15_07 begrenzt ist und die Architektur ebenfalls auf Intel festgelegt ist und nicht die Mac-CPU-Architektur meldet. Dies gilt auch für Firefox und Chrome unter macOS.
Vor iOS 26 (veröffentlicht im September 2025) legte Safari unter iOS die tatsächliche Betriebssystemversion offen. Apple hat jedoch den iOS/iPadOS User-Agent in Safari 26 eingefroren, ähnlich wie bei macOS. Das Beispiel unten zeigt einen User-Agent vor iOS 26:
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1
Hinweis: Ab iOS 26 verfügen alle Browser unter iOS (Chrome, Firefox, Safari) über eingefrorene User-Agent-Strings, ähnlich wie macOS. Die Beispiele unten zeigen das Verhalten vor iOS 26:
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/126.0.6478.153 Mobile/15E148 Safari/604.1
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/127.1 Mobile/15E148 Safari/605.1.15
Insgesamt ist offensichtlich, dass der User-Agent speziell im Hinblick auf Informationen mit hoher Entropie reduziert wird. Die folgende Übersicht zeigt, auf welchen Plattform- / Betriebssystemkombinationen der User-Agent reduziert ist.
| Browser | Windows | MacOS | iOS | Android |
|---|---|---|---|---|
| Chrome | reduziert | reduziert | reduziert (iOS 26+) | reduziert |
| Edge | reduziert | reduziert | reduziert (iOS 26+) | reduziert |
| Firefox | reduziert | reduziert | reduziert (iOS 26+) | reduziert |
| Safari | - | reduziert* | reduziert (Safari 26+)** | - |
| Samsung Internet | - | - | - | reduziert |
| WebViews | - | - | reduziert (iOS 26+) | nicht reduziert (≥ 16: red) |
Daher sind die wichtigsten Erkennungsprobleme mit einem reduzierten User-Agent (* = siehe Anmerkungen unten für die macOS-Version):
Hier ist eine Tabelle, die macOS-Versionen ihren entsprechenden Safari-Versionen zuordnet:
| macOS Version | Safari Version | Erscheinungsjahr |
|---|---|---|
| macOS Sequoia (15) | Safari 18 | 2024 |
| macOS Sonoma (14) | Safari 17 | 2023 |
| macOS Ventura (13) | Safari 16 | 2022 |
| macOS Monterey (12) | Safari 15 | 2021 |
| macOS Big Sur (11) | Safari 14 | 2020 |
| macOS Catalina (10.15) | Safari 13 | 2019 |
Es gibt andere Möglichkeiten, Betriebssysteme und Browser auf der Grundlage aufwändiger Fingerprinting-Techniken wie dem TLS-Fingerprinting zu erkennen. Da es legitime Szenarien gibt, in denen eine tiefere Betriebssystemerkennung sinnvoll wäre, hat Google Client Hints eingeführt, um diese Informationen programmatisch abrufen zu können. Wir werden im nächsten Kapitel sehen, wie Client Hints funktionieren.
Client Hints ermöglichen es Websites, auf hoch entropische Informationen, die aus dem User-Agent-String entfernt wurden, auf datenschutzfreundliche Weise zuzugreifen. Es gibt zwei primäre Methoden, um auf Client Hints zuzugreifen:
Client Hints können auch verwendet werden, um die niederentropischen Informationen abzurufen, die bereits im User-Agent enthalten sind. Dies impliziert, dass in Chrome, wo Client Hints unterstützt werden, User-Agents nicht mehr benötigt werden.
Je nachdem, welche Zugriffsmethode verwendet wird, unterscheidet sich die Benennung der Client Hints leicht. Wir haben die wichtigsten Namen von Client Hints aufgelistet:
| HTTP UA-CH Token | UA-CH JS API | Entropie |
|---|---|---|
| Sec-CH-UA-Platform-Version | UADataValues.platformVersion | Hoch |
| Sec-CH-UA-Mobile | NavigatorUAData.mobile | Niedrig |
| Sec-CH-UA-Model | UADataValues.model | Hoch |
| Sec-CH-UA | NavigatorUAData.brands | Niedrig |
| Sec-CH-UA-Arch | UADataValues.architecture | Hoch |
In einem First-Party-Kontext können Websites spezifische Informationen über den Browser und das Gerät des Benutzers über HTTP-Anfrage-Header anfordern. Dieser Ansatz beinhaltet das Setzen des korrekten Headers in der HTTP-Antwort des Servers, der angibt, an welchen Client Hints der Server interessiert ist. Der Browser fügt diese Hints dann in nachfolgende Anfragen an denselben Ursprung (Origin) ein.
Dieser Header signalisiert dem Browser, in zukünftigen Anfragen detaillierte Benutzerinformationen zu senden, wodurch der Server die Antworten entsprechend anpassen kann. Diese Methode stellt sicher, dass detaillierte Benutzerinformationen nur für die First-Party-Website zugänglich sind und verhindert, dass Ressourcen von Drittanbietern hoch entropische Daten erhalten. Es gibt zwei Arten von Anfrage-Headern, die wir jetzt besprechen werden:
Reguläre Client Hints sind Header, die ein Server vom Browser anfordern kann, um Informationen über die Umgebung des Benutzers in nachfolgenden Anfragen zu sammeln.
Beispiel: Chrome unter macOS 14.5 mit regulären Client Hints auf corbado.com
| Header | Wert |
|---|---|
| Sec-CH-UA | "Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24" |
| Sec-CH-UA-Mobile | ?0 |
| Sec-CH-UA-Platform | "macOS" |
| Header | Wert |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| Header | Wert |
|---|---|
| Sec-CH-UA | "Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24" |
| Sec-CH-UA-Mobile | ?0 |
| Sec-CH-UA-Platform | "macOS" |
| Sec-CH-UA-Platform-Version | "14.5.0" |
Gleichzeitig bleibt der User-Agent für diese Anfrage unverändert (ohne Plattformversion):
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Über https://user-agent-client-hints.glitch.me/headers können Sie tatsächlich damit herumspielen, wie verschiedene Informationslayouts für reguläre Hints aussehen würden (denken Sie daran, Sie müssen Chrome verwenden). Weitere Details finden Sie hier. Falls corbado.com diese Informationen bereits beim allerersten Seitenaufruf benötigen würde, wäre die Verwendung von regulären Client Hints nicht ausreichend, aber es gibt eine Möglichkeit, diesen Prozess mit kritischen (Client) Hints zu beschleunigen.
Angenommen, corbado.com benötigt die Plattformversion bei der ersten Anfrage, um eine entsprechende Download-Seite zu rendern, die genau auf die macOS-Version zugeschnitten ist. Es könnte die Critical (Client) Hints verwenden, was zu einem sofortigen erneuten Versuch der Anfrage führen würde, um die Seite einschließlich des Headers zu rendern:
Beispiel: Chrome unter macOS 14.5 mit kritischen Client Hints auf corbado.com
| Header | Wert |
|---|---|
| Sec-CH-UA | "Google Chrome";v="125", "Chromium";v="125", "Not_A/Brand";v="24" |
| Sec-CH-UA-Mobile | ?0 |
| Sec-CH-UA-Platform | "macOS" |
| Header | Wert |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| Header | Wert |
|---|---|
| Sec-CH-UA | "Google Chrome";v="125", "Chromium";v="125", "Not_A/Brand";v="24" |
| Sec-CH-UA-Mobile | ?0 |
| Sec-CH-UA-Platform | "macOS" |
| Sec-CH-UA-Platform-Version | "14.5.0" |
In den folgenden Diagrammen sehen wir ein weiteres Beispiel, bei dem die Website das Gerätemodell als kritischen Teil mit dem Critical-CH-Header anfordert. Wie wir sehen können, versucht der Client die Anfrage wie im obigen Beispiel erneut (linkes Sequenzdiagramm).
Client Hints mit Chromium: https://developers.google.com/privacy-sandbox/protections/User-Agent
Die Verwendung von kritischen Client Hints fügt daher Latenz hinzu, da der Browser sofort eine zweite Anfrage starten muss, was Roundtrips hinzufügt. Es gibt eine Möglichkeit, die Übertragung zu optimieren, indem der TLS-Handshake erleichtert wird (das grüne Kästchen oben im Diagramm), um die Details bereits zu übertragen. Dieser Ansatz zur Erleichterung von ALPN (Application-Layer Protocol Negotiation) ist hier im Detail zu finden, sprengt aber den Rahmen dieses Artikels.
Um zusätzliche Informationen mithilfe von Headern zu erhalten, muss die Konfiguration entweder dem Backend oder dem Webserver / Load Balancer hinzugefügt werden. Dies ist in einem First-Party-Kontext leicht zu bewerkstelligen, wenn Sie als Unternehmen die volle Kontrolle über die Website haben. Beispielsweise benötigen unsere UI-Komponenten auf corbado.com die Plattformversion, um die Präzision unserer Passkey Intelligence zu erhöhen. Entwickler integrieren unsere Komponenten auf verschiedenen Seiten und von ihnen zu verlangen, Header hinzuzufügen und diese Informationen dann an unsere Komponenten weiterzugeben, wäre ein unangenehmer Mehraufwand. Für SPAs und andere eingebettete JavaScript-Anwendungen gibt es eine weitere Schnittstelle, die verwendet werden kann, was im nächsten Abschnitt erläutert wird.
Mithilfe der Funktion navigator.userAgentData.getHighEntropyValues() kann auch über eine JavaScript-API auf Client Hints zugegriffen werden, was eine flexible und dynamische Möglichkeit bietet, spezifische Informationen über den Browser und das Gerät des Benutzers anzufordern. Diese Methode beinhaltet die Verwendung des Objekts navigator.userAgentData innerhalb des Skripts der Webseite, um Client Hints abzufragen. Diese Methode erfordert nicht, dass Client-Hint-Header gesetzt werden, aber sie funktioniert nur in Browsern, die navigator.userAgentData unterstützen (Chromium-basierte Browser wie Chrome und Edge). Firefox und Safari unterstützen diese API nicht, sodass Entwickler eine Feature-Erkennung durchführen und Fallbacks bereitstellen müssen.
Wenn Sie diesen Code beispielsweise in einer Chrome-Konsole unter macOS ausführen:
if (navigator.userAgentData) { navigator.userAgentData .getHighEntropyValues(["architecture", "model", "platformVersion"]) .then((ua) => { console.log(ua); }); }
Wenn der Promise aufgelöst wird, werden die relevanten Informationen zurückgegeben. Wie wir oben skizziert haben, sind die Namen nicht vollständig identisch mit den Headern, kommen diesen aber sehr nahe.
Die platformVersion wird dann im Promise zurückgegeben und kann direkt aus dem eingebetteten JavaScript-Code abgerufen werden. Die Abdeckung für diese Funktion ist viel geringer als die tatsächliche User-Agent-Reduzierung:
Darüber hinaus bietet Chrome diese Funktionalität unter iOS nicht an, da es aufgrund von Apples Einschränkungen WebKit unter iOS einsetzt.
Wir haben nun die wichtigsten Fakten zur User-Agent-Reduzierung zusammengestellt und aufgezeigt, wie Client Hints einen Ausweg in Chrome bieten.
Abhängig von Ihrem Anwendungsfall sollten Sie einen anderen Ansatz wählen, um sicherzustellen, dass Ihre Anwendung das bestmögliche Ergebnis erzielt:
Die folgende Tabelle fasst zusammen, wo Sie die Betriebssystemversion noch erkennen können, wenn Sie Zugriff auf den User-Agent (UA) und Client Hints (CH) haben:
| Browser | Windows | MacOS | iOS | Android |
|---|---|---|---|---|
| Chrome | ✅ CH | ✅ CH | ❌ (iOS 26+) | ✅ CH |
| Edge | ✅ CH | ✅ CH | ❌ (iOS 26+) | ✅ CH |
| Firefox | ❌ | ❌ | ❌ (iOS 26+) | ❌ |
| Safari | - | ✅ UA-Safari | ❌ (Safari 26+) | - |
| Samsung Internet | - | - | - | ✅ CH |
| WebViews | - | - | ❌ (iOS 26+) | ✅ UA (≥ 16: ❌) |
Durch die Auswahl der geeigneten Methode basierend auf Ihren spezifischen Anforderungen können Sie den Bedarf an detaillierten Benutzerinformationen mit Datenschutz- und Leistungsüberlegungen effektiv in Einklang bringen. Wenn Sie stark von Informationen abhängig sind, die schwer zu extrahieren oder sehr gerätespezifisch sind, greifen Sie auf professionelle Bibliotheken wie wurfl oder 51degrees.com zurück, die Ihnen die schwere Arbeit abnehmen. Beide Bibliotheken unterstützen die Integration von Client-Links in die Erkennung und verfügen auch über eine eigene proprietäre Methode, um sogar iPhone-Modelle zu erkennen.
Bei Corbado konzentrieren wir uns auf die Entwicklung von Lösungen rund um Passkeys mithilfe von UI-Komponenten, die hauptsächlich mit React entwickelt wurden. Unsere Komponenten werden in verschiedene Websites eingebettet, daher folgen wir unserer eigenen Empfehlung und verwenden getHighEntropyValues() überall dort, wo es verfügbar ist, und greifen für alle anderen Fälle auf das klassische User-Agent-Parsing zurück. Wir verwenden dies hauptsächlich für:
Weitere Details auf: https://learn.microsoft.com/en-us/microsoft-edge/web-platform/how-to-detect-win11
Als wir anfingen, Informationen für unsere Komponenten zusammenzustellen, stießen wir auf viele fragmentierte Daten, die während oder vor dem Start der User-Agent-Reduzierung erstellt wurden. Daher dachten wir, eine Zusammenfassung würde Entwicklern helfen, die die Erkennung verbessern wollen, aber nicht regelmäßig mit User-Agents oder Client Hints arbeiten.
Nachdem die User-Agent-basierte Erkennung jahrzehntelang der Standard war, sind User-Agent-Strings weniger detailliert geworden, um die Privatsphäre der Benutzer zu schützen. In diesem Artikel haben wir Folgendes behandelt:
Client Hints entwickeln sich weiter, und ihre Akzeptanz könnte steigen, da immer mehr Browser und Entwickler ihre Vorteile erkennen. Es bleibt jedoch abzuwarten, ob sich ihre Unterstützung weit verbreiten wird oder ob das Web bei diesem Thema weiterhin unterschiedliche Wege gehen wird.
Corbado ist die Authentication Intelligence Platform für CIAM-Teams, die Consumer-Authentifizierung im großen Maßstab betreiben. Wir zeigen Ihnen, was IDP-Logs und generische Analytics-Tools nicht sehen können: welche Geräte, OS-Versionen, Browser und Credential-Manager Passkeys unterstützen, warum Enrollments nicht zu Logins werden, wo der WebAuthn-Flow scheitert und wann ein OS- oder Browser-Update den Login still und leise unterbricht – und das alles, ohne Okta, Auth0, Ping, Cognito oder Ihren In-House-IDP zu ersetzen. Zwei Produkte: Corbado Observe ergänzt Observability für Passkeys und jede andere Login-Methode. Corbado Connect bringt Managed Passkeys mit integrierter Analytics (neben Ihrem IDP). VicRoads betreibt Passkeys für über 5 Mio. Nutzer mit Corbado (+80 % Passkey-Aktivierung). Mit einem Passkey-Experten sprechen →
Apple hat den iOS/iPadOS User-Agent-String in Safari 26, der im September 2025 veröffentlicht wurde, eingefroren, was bedeutet, dass die Betriebssystemversion nicht mehr über den User-Agent in einem Browser unter iOS offengelegt wird. Im Gegensatz zu Chrome auf Android oder Desktop ist in iOS-Browsern keine Client-Hints-API verfügbar, sodass die tatsächliche iOS-Version nicht mehr programmatisch zugänglich ist.
Reguläre Client Hints, die über den Accept-CH-Antwort-Header angefordert werden, sind nur in nachfolgenden Anfragen enthalten und beim anfänglichen Laden der Seite nicht verfügbar. Kritische Client Hints (Critical Client Hints) lösen vor dem Rendern einen sofortigen erneuten Versuch des Browsers aus und stellen so sicher, dass der Hint beim ersten Rendern verfügbar ist, dies fügt dem Anfragezyklus jedoch einen Roundtrip an Latenz hinzu.
Apple kündigte 2017 das Einfrieren des User-Agents in der Safari Technology Preview 46 an, revidierte diese Entscheidung jedoch 2021 teilweise aufgrund erheblicher Kompatibilitätsprobleme mit Websites, die auf aktuelle User-Agent-Informationen angewiesen waren. Apple implementierte daraufhin einen schrittweiseren Ansatz für eingefrorene UAs anstelle eines sofortigen, vollständigen Einfrierens zu diesem Zeitpunkt.
Safari unterstützt keine Client Hints, aber die macOS-Version kann aus der Safari-Versionsnummer im User-Agent-String abgeleitet werden. Wenn man drei von der Hauptversion von Safari abzieht, erhält man zuverlässig die Hauptversion von macOS für macOS 10.15 und höher, basierend auf der konsistenten Abstimmung der Veröffentlichungen zwischen Safari- und macOS-Versionen.
Der empfohlene Ansatz besteht darin, navigator.userAgentData.getHighEntropyValues() aufzurufen, wenn die Funktion definiert ist, was Chromium-basierte Browser abdeckt, und für Firefox und Safari auf Bibliotheken zum Parsen von User-Agent-Strings zurückzugreifen. Für Fälle, die eine hochspezifische Identifizierung des Gerätemodells erfordern, bieten professionelle Bibliotheken wie wurfl oder 51degrees zusätzliche Erkennungsmöglichkeiten über das hinaus, was User-Agent-Strings offenlegen.
Ähnliche Artikel
Inhaltsverzeichnis