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-Hinweis-API können Entwickler die Nutzerfreundlichkeit verbessern, indem sie nur die föderierten Anmeldekonten der Domain anzeigen, die sie akzeptieren.

Domain Hint API

Mit FedCM kann es für Nutzer einfacher sein, sich mit Kontoinformationen, die von einem Identitätsanbieter (Identity Provider, IdP) bereitgestellt werden, bei einer vertrauenden Partei (Relying Party, RP, 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, auf 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. Für eine bessere Nutzerfreundlichkeit kann der RP über die FedCM API nur die Konten anzeigen lassen, mit denen er sich anmelden kann. So wird verhindert, dass ein Nutzer versucht, sich mit einem Konto außerhalb der Unternehmensdomain beim RP anzumelden, und später eine Fehlermeldung erhält (oder keine Reaktion, weil die Anmeldung nicht funktioniert hat), weil 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 Identitätsanbieter kann eine domain_hints-Property als Teil einer Antwort vom Endpunkt „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 einer domainHint-Property 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 nicht für die serverseitige Filterung an den Endpunkt der Kontoliste gesendet, da dies ein Fingerprint-Vektor für den Identitätsanbieter sein kann. Stattdessen führt Chrome wie gewohnt eine FedCM-Anfrage aus und filtert die Konten heraus, die nicht mit dem domainHint-Wert übereinstimmen, der im navigator.credentials.get()-Aufruf angegeben ist. Anschließend zeigt Chrome dem Nutzer das FedCM-Dialogfeld mit der Liste der neuen Konten an. Dieser Ansatz ähnelt der API für Anmeldehinweise, aber diese beiden APIs beantworten unterschiedliche Fragen. Die Login Hint API soll die Frage beantworten: „Welche Kennung ist für den gewünschten Nutzer gültig?“, während die Domain Hint API die Frage beantworten soll: „Welchem Unternehmen oder Server muss dieses Konto zugewiesen sein?“

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 dem DomainHint übereinstimmen
Beispiel für einen Anmeldeprompt, wenn keine Konten mit der domainHint übereinstimmen.