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ć lepsze wrażenia użytkownika, wyświetlając tylko federacyjne konta logowania z domeny, które akceptują.

Domain Hint API

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). Zdarzają się jednak sytuacje, w których grupa objęte ograniczeniami już wie, że tylko konta powiązane z konkretną domeną mogą logować się 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 FedCM API pozwala RP wyświetlać tylko konta, 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) z powodu nieużywania konta odpowiedniego typu.

Dzięki interfejsowi Domain Hint API dostawcy reklamy mogą określić 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świetlać pasujące konta bez ujawniania dostawcy tożsamości żądanej podpowiedzi dotyczącej domeny.

Przykładowa odpowiedź JSON z punktu końcowego listy kont będzie wyglądać 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 dla dostawcy tożsamości. 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 jest używany parametr domainHint: "any", Chrome odfiltrowuje konta, które nie mają żadnych domen (czyli pole domain_hints nie jest przekazywane lub jest puste). Pozwala to na przykład na przypadki użycia, w których w ramach programu objętego ograniczeniami dostęp do nich jest możliwy tylko na kontach zarządzanych.

Gdy żadne konta nie pasują do domainHint, w oknie FedCM pojawi się prośba o zalogowanie się, która pozwoli użytkownikowi zalogować się na konto dostawcy tożsamości pasujące do podpowiedzi żądanej przez RP. Gdy użytkownik kliknie ten prompt, otworzy się wyskakujące okienko z adresem URL logowania podanym w pliku konfiguracyjnym. Następnie do linku dołączana jest wskazówka dotycząca logowania i parametry zapytania ze wskazówkami dotyczącymi domeny.

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