FedCM-Updates: Domain Hint API

Ab Chrome 123 können Sie die Domain-Hinweise zusammen mit der Federated Credential Management API (FedCM) verwenden. Mit der Domain Hint API können Entwickler für eine bessere Nutzererfahrung sorgen, indem nur die föderierten Anmeldekonten der Domain angezeigt werden, die sie akzeptieren.

Domain Hint API

FedCM kann verwendet werden, um einem Nutzer die Anmeldung bei einer vertrauenden Partei (RP, Verweis auf eine Website) mithilfe von Kontoinformationen zu erleichtern, die von einem Identitätsanbieter (Identity Provider, IdP) bereitgestellt werden. Es gibt jedoch Fälle, in denen das RP bereits weiß, dass sich nur Konten, die mit einer bestimmten Domain verknüpft sind, bei der Website anmelden dürfen. Dies kommt besonders häufig in Unternehmensszenarien vor, in denen der Zugriff auf eine Website auf eine Unternehmensdomain beschränkt ist. Für eine bessere Nutzererfahrung ermöglicht die FedCM API im RP nur die Konten, die zur Anmeldung im RP verwendet werden können. Dadurch werden Szenarien verhindert, in denen ein Nutzer versucht, sich mit einem Konto außerhalb der Unternehmensdomain im RP anzumelden, und erhält nur später eine Fehlermeldung (oder wird stummgeschaltet, wenn die Anmeldung nicht funktioniert hat), da der richtige Kontotyp nicht verwendet wurde.

Mit der Domain Hint API können RPs bei einem FedCM API-Aufruf das Attribut domainHint angeben, um nur übereinstimmende Konten für den Nutzer anzuzeigen. Der IdP kann das Attribut domain_hints als Teil einer Antwort vom Endpunkt der Kontenliste bereitstellen, um anzugeben, mit welchen Domains ein Konto verknüpft ist. Auf diese Weise kann der Browser die übereinstimmenden Konten anzeigen, ohne den angeforderten Domainhinweis für den IdP offenzulegen.

Eine JSON-Antwort vom Endpunkt der Kontenliste sieht beispielsweise so aus:

{
 "accounts": [{
   "id": "1234",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "approved_clients": ["123", "456", "789"],
  }, {
   "id": "5678",
   "given_name": "Johnny",
   "name": "Johnny",
   "email": "johnny@idp.example",
   "picture": "https://idp.example/profile/456"
   "approved_clients": ["abc", "def", "ghi"],
   "domain_hints": ["corp.example"]
  }]
}

Das RP kann navigator.credentials.get() mit einem domainHint-Attribut aufrufen, um die Konten zu filtern. Angenommen, ein Nutzer besucht corp-partner.example und meldet sich mit einem Konto von corp.example an. Die Website würde die API so aufrufen:

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "abc",
      nonce: nonce,
      domainHint : "corp.example"
    }]
  }
});

Der Wert domainHint wird zur serverseitigen Filterung nicht an den Endpunkt der Kontenliste gesendet, da dies ein Fingerprinting-Vektor an den IdP sein kann. Stattdessen führt Chrome wie gewohnt eine FedCM-Anfrage aus und filtert die Konten heraus, die nicht dem im Aufruf navigator.credentials.get() angegebenen domainHint-Wert entsprechen. Dann zeigt Chrome dem Nutzer mit der Liste der neuen Konten das FedCM-Dialogfeld an. Dieser Ansatz ähnelt der Login Hint API, aber die beiden APIs beantworten unterschiedliche Fragen. Die Login Hint API liefert die Antwort „Welches ist eine Kennung für den gewünschten Nutzer?“, während „Domain Hint“ die Frage „Welcher Unternehmen oder Server muss dieses Konto angehören?“.

Wenn domainHint: "any" verwendet wird, werden in Chrome Konten herausgefiltert, die keine Domains haben, d. h. domain_hints wurde nicht übergeben oder ist leer. Dies ermöglicht beispielsweise Anwendungsfälle, bei denen das RP bei der Registrierung nur verwaltete Konten zulässt.

Wenn keine Konten mit dem domainHint übereinstimmen, wird im FedCM-Dialogfeld eine Anmeldeaufforderung angezeigt, mit der sich der Nutzer bei einem IdP-Konto anmelden kann, das dem von RP angeforderten Hinweis entspricht. Wenn der Nutzer auf die Eingabeaufforderung tippt, wird ein Pop-up-Fenster mit der in der Konfigurationsdatei angegebenen Anmelde-URL geöffnet. An den Link wird dann der Anmeldehinweis und die Abfrageparameter für Domain-Hinweise angehängt.

Beispiel für eine Anmeldeaufforderung, wenn kein Konto mit dem domainHint übereinstimmt
Beispiel für eine Anmeldeaufforderung, wenn kein Konto mit der domainHint übereinstimmt.