Aktualizacje FedCM: Domains Hint API

W Chrome 123 możesz używać wskazówek dotyczących domen 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.

Domain Hint API

FedCM może ułatwić użytkownikom logowanie się na stronie strony zależnej (RP) za pomocą informacji o koncie udostępnionych przez dostawcę tożsamości (IdP). Zdarzają się jednak sytuacje, gdy RP 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órych można używać 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 RP mogą określać w wywołaniu interfejsu FedCM API właściwość domainHint, aby wyświetlać tylko pasujące konta użytkownika. 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 generowania 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 należy 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 umożliwia to przypadki użycia, w których RP zezwala na konta zarządzane tylko w procesie rejestracji.

Jeśli żadne konto nie pasuje do domainHint, w oknie FedCM wyświetla się prośba o logowanie, która 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 domenyHint.
Przykładowy komunikat logowania, gdy żadne konto nie pasuje do domainHint.