Aktualizacje FedCM: Domains Hint API

W Chrome 123 możesz używać wskazówek dotyczących domeny wraz z interfejsem Federated Credential Management API (FedCM). Dzięki interfejsowi Domain Hint API deweloperzy mogą zapewnić większą wygodę użytkownikom, wyświetlając tylko federacyjne konta logowania z domeny, która akceptuje logowanie.

Interfejs API podpowiedzi dotyczących domen

FedCM może ułatwić użytkownikowi logowanie się na stronie logowania (RP) za pomocą informacji o koncie dostarczonych przez dostawcę tożsamości (IdP). Są jednak przypadki, w których dostawca usług rejestracji już wie, że tylko konta powiązane z określoną domeną mogą się zalogować w witrynie. Jest to szczególnie typowe w sytuacjach, gdy dostęp do witryny jest ograniczony do domeny firmowej. Aby zapewnić lepsze wrażenia użytkownika, interfejs API FedCM umożliwia RP wyświetlanie tylko tych kont, które mogą służyć do logowania się w RP. Zapobiega to sytuacjom, w których użytkownik próbuje zalogować się do RP za pomocą konta spoza domeny firmowej, a później wyświetla mu się komunikat o błędzie (lub nie wyświetla się nic, ponieważ logowanie się nie powiodło), ponieważ nie został użyty odpowiedni typ konta.

Dzięki interfejsowi Domain Hint API dostawcy reklamy mogą określać w wywołaniu interfejsu FedCM API właściwość domainHint, aby wyświetlać tylko pasujące do użytkownika konta. IdP może podać usługę domain_hints w ramach odpowiedzi z punktu końcowego listy kont, aby wskazać, z którymi domenami jest powiązane konto. Dzięki temu przeglądarka może wyświetlić pasujące konta bez ujawniania żądanego podpowiedzi domeny dostawcy tożsamości.

Przykładowa odpowiedź JSON z punktu końcowego listy kont wyglądałaby tak:

{
 "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"]
  }]
}

Aby filtrować konta, RP może wywołać funkcję navigator.credentials.get() z usługą domainHint. Załóżmy, że użytkownik odwiedza stronę corp-partner.example i loguje się na konto z corp.example. Witryna wywoła interfejs API w ten sposób:

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

Wartość domainHint nie jest wysyłana do punktu końcowego z listą kont na potrzeby filtrowania po stronie serwera, ponieważ może to stanowić wektor do tworzenia odcisków palców w usłudze IdP. Zamiast tego Chrome wykonuje żądanie FedCM w zwykły sposób i odfiltrowuje konta, które nie pasują do wartości domainHint określonej przez wywołanie navigator.credentials.get(). Następnie Chrome wyświetla użytkownikowi okno FedCM z listą nowych kont. To podejście jest podobne do interfejsu API podpowiedzi logowania, ale te 2 interfejsy API odpowiadają na różne pytania. Interfejs API podpowiedzi logowania ma na celu udzielenie odpowiedzi na pytanie „Który identyfikator należy do wybranego użytkownika?”, a interfejs API podpowiedzi domeny ma na celu udzielenie odpowiedzi na pytanie „Do której firmy lub serwera ma należeć to konto?”.

Gdy używana jest opcja domainHint: "any", Chrome odfiltrowuje konta, które nie mają żadnych domen (czyli domain_hints nie jest przekazywany lub jest pusty). Na przykład: ta funkcja umożliwia przypadki użycia, w których RP zezwala na konta zarządzane tylko w procesie rejestracji.

Jeśli nie ma kont pasujących do domainHint, okno FedCM wyświetla monit logowania, który umożliwia użytkownikowi zalogowanie się na konto dostawcy tożsamości pasujące do wskazówki przesłanej przez RP. Gdy użytkownik kliknie prompt, otworzy się wyskakujące okienko z adresem URL logowania określonym w pliku konfiguracyjnym. Następnie do linku dodawane są parametry zapytania podpowiedzi logowania i podpowiedzi domeny.

Przykładowy komunikat logowania, gdy żadne konta nie pasują do domeny
Przykładowy komunikat logowania, gdy żadne konto nie pasuje do domainHint.