FedCM-Updates: Domain Hint API

Ab Chrome 123 können Sie die Domain-Hints zusammen mit der Federated Credential Management API (FedCM) verwenden. Mit der Domain Hint API können Entwickler die Nutzerfreundlichkeit verbessern, da nur die föderierten Anmeldekonten der akzeptierten Domain angezeigt werden.

Domain Hint API

Mit FedCM kann es für Nutzer einfacher sein, sich mit Kontoinformationen, die von einem Identitätsanbieter (IdP) bereitgestellt werden, bei einer vertrauenden Partei (RP, „Relying Party“, die sich auf eine Website bezieht) anzumelden. Es gibt jedoch Fälle, in denen der RP bereits weiß, dass sich nur Konten, die mit einer bestimmten Domain verknüpft sind, bei der Website anmelden dürfen. Das ist besonders häufig in Unternehmensszenarien der Fall, in denen der Zugriff auf die Website auf eine Unternehmensdomain beschränkt ist. Um eine bessere Nutzererfahrung zu bieten, ermöglicht die FedCM API dem RP, nur die Konten anzuzeigen, die zur Anmeldung beim RP verwendet werden können. Dadurch werden Szenarien verhindert, in denen ein Nutzer versucht, sich mit einem Konto außerhalb der Unternehmensdomain beim RP anzumelden, und später eine Fehlermeldung erhalten (oder den Bildschirm ignorieren, wenn die Anmeldung nicht funktioniert hat), da nicht der richtige Kontotyp verwendet wurde.

Mit der Domain Hint API können RPs bei einem FedCM API-Aufruf eine domainHint-Property 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 angeben, um anzugeben, mit welchen Domains ein Konto verknüpft ist. So kann der Browser die übereinstimmenden Konten anzeigen, ohne den angeforderten Domainhinweis an den IdP weiterzugeben.

Eine Beispiel-JSON-Antwort vom Endpunkt „accounts_list“ sieht in etwa 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"]
  }]
}

Der RP kann navigator.credentials.get() mit der Property domainHint aufrufen, um die Konten zu filtern. Beispiel: Ein Nutzer besucht corp-partner.example und meldet sich mit einem Konto aus 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 nicht für das serverseitige Filtern an den Endpunkt der Kontoliste gesendet, da dies ein Fingerabdruckvektor für den IdP sein kann. Stattdessen führt Chrome wie gewohnt eine FedCM-Anfrage aus und filtert die Konten heraus, die nicht mit dem im navigator.credentials.get()-Aufruf angegebenen domainHint-Wert übereinstimmen. Anschließend zeigt Chrome dem Nutzer das FedCM-Dialogfeld mit der Liste der neuen Konten an. Dieser Ansatz ähnelt der Login Hint API, aber diese beiden APIs beantworten unterschiedliche Fragen. Die Login Hint API versucht, zu beantworten, „Welches Unternehmen oder welcher Server gehört zu welchem Unternehmen?“.

Wenn domainHint: "any" verwendet wird, filtert Chrome Konten heraus, die keine Domains haben (d. h. domain_hints wird nicht übergeben oder ist leer). So sind beispielsweise Anwendungsfälle möglich, bei denen der RP nur verwaltete Konten beim Registrierungsprozess zulässt.

Wenn keine Konten mit der domainHint übereinstimmen, wird im FedCM-Dialogfeld eine Anmeldeaufforderung angezeigt, über die sich der Nutzer in einem IdP-Konto anmelden kann, das mit dem vom RP angeforderten Hinweis übereinstimmt. Wenn der Nutzer auf die Aufforderung tippt, wird ein Pop-up-Fenster mit der Anmelde-URL geöffnet, die in der Konfigurationsdatei angegeben ist. Dem Link werden dann die Abfrageparameter „Anmeldehinweis“ und „Domainhinweis“ angehängt.

Beispiel für eine Anmeldeaufforderung, wenn keine Konten mit domainHint übereinstimmen.
Beispiel für eine Anmeldeaufforderung, wenn keine Konten mit domainHint übereinstimmen.