Aktualizacje FedCM: Domains Hint API

Od Chrome 123 możesz używać też funkcji Domain Hints (wskazówki dotyczące domeny) oraz Federated Credential Management API (FedCM). Dzięki interfejsowi Domains Hint API deweloperzy mogą zwiększyć wygodę użytkowników, pokazując tylko sfederowane konta logowania z akceptowanej przez nich domeny.

Interfejs API Site Hint

Usługa FedCM może ułatwić użytkownikowi logowanie się do jednostki uzależnionej (RP, w odniesieniu do witryny) przy użyciu informacji o koncie przekazanych przez dostawcę tożsamości. Istnieją jednak przypadki, w których RP wie już, że w witrynie mogą się logować tylko konta powiązane z konkretną domeną. Jest to szczególnie częste w scenariuszach biznesowych, gdy dostęp do witryny jest ograniczony do domeny firmowej. Aby zwiększyć wygodę użytkowników, interfejs API FedCM pozwala na wyświetlanie tylko tych kont, za pomocą których można się do niej zalogować. Zapobiega to sytuacji, w której użytkownik próbuje zalogować się w grupie objętej ograniczeniami, używając konta spoza domeny firmowej. Komunikat o błędzie pojawia się później (lub w przypadku problemów z logowaniem nie działa) z powodu użycia odpowiedniego konta.

Dzięki interfejsowi Domains Hint API grupy objęte ograniczeniami mogą określać właściwość domainHint w wywołaniu interfejsu FedCM API, aby wyświetlać tylko konta pasujące do danego użytkownika. Dostawca tożsamości może podać właściwość domain_hints w odpowiedzi z punktu końcowego listy kont, aby wskazać, z którymi domenami powiązane jest konto. Dzięki temu przeglądarka może wyświetlić 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"]
  }]
}

Grupa z ograniczonym dostępem może wywołać filtr navigator.credentials.get() za pomocą właściwości domainHint. Załóżmy na przykład, że użytkownik odwiedza witrynę corp-partner.example i loguje się na konto z adresu corp.example. Strona wywoła interfejs API w następujący 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 listy kont na potrzeby filtrowania po stronie serwera, ponieważ może to być wektor odciskowy do dostawcy tożsamości. Zamiast tego Chrome w zwykły sposób wykonuje żądanie FedCM i odfiltrowuje konta, które nie pasują do wartości domainHint określonej w wywołaniu navigator.credentials.get(). Następnie Chrome wyświetli okno FedCM użytkownikowi z listą nowych kont. Takie podejście jest podobne do interfejsu Login API, ale te 2 interfejsy API odpowiadają na inne pytania. Interfejs Login Hint API ma na celu odpowiedź na pytanie „Jaki jest identyfikator odpowiedniego użytkownika?”, natomiast Wskazówka dotycząca domeny ma na celu odpowiedź „Do jakiej firmy lub serwera musi należeć to konto?”.

Gdy używasz parametru domainHint: "any", Chrome odfiltrowuje konta, które nie mają żadnych domen (czyli adres domain_hints nie jest przekazany lub jest pusty). Pozwala to np. na uwzględnienie w procesie rejestracji tylko kont zarządzanych w ramach grupy objętej ograniczeniami.

Gdy żadne konto nie pasuje do domainHint, w oknie FedCM wyświetla się prośba o zalogowanie. Użytkownik może zalogować się na konto dostawcy tożsamości odpowiadające wskazówce wymaganej przez grupę objętą ograniczeniami. Gdy użytkownik kliknie tę prośbę, otworzy się wyskakujące okienko z adresem URL logowania podanym w pliku konfiguracji. Do linku są następnie dołączane wskazówkę dotyczącą logowania i parametry zapytania wskazówki o domenie.

Przykładowy komunikat o logowaniu, gdy żadne konto nie jest zgodne z wskazówką domainHint.
Przykładowy komunikat o zalogowaniu się, gdy żadne konto nie jest zgodne z polem domainHint.