Aktualizacje FedCM: interfejs Login Status API, Error API oraz automatycznie wybrany interfejs Flag API

W Chrome 120 wprowadzamy interfejs Login Status API dla FedCM. Interfejs Login Status API (dawniej IdP Sign-in Status API) umożliwia dostęp do witryn, zwłaszcza dostawców tożsamości, aby zasygnalizować przeglądarce, że ich użytkownicy logowanie się i wylogowywanie. Ten sygnał jest używany przez FedCM w trakcie cichego ataku wysyłanego z wyprzedzeniem Pozwala to FedCM działać bez pliki cookie. Ten aktualizacja dotyczy ostatnich pozostałych niezgodnych wstecznie zmian, które wprowadziliśmy wcześniej zidentyfikowanych w pierwotnym celu wysyłki FedCM w ramach naszego zakresu pracy.

Interfejs Login Status API poprawia użyteczność i ochronę prywatności, ale niekompatybilna wsteczna zmiana po wysłaniu. Jeśli masz już implementacji FedCM, pamiętaj o zaktualizowaniu jej za pomocą za instrukcje.

Chrome udostępnia też dwa nowe sfederowane funkcje zarządzania danymi logowania (FedCM):

  • Interfejs API błędów: powiadamiaj użytkowników, gdy próba logowania się nie powiedzie się za pomocą natywnego interfejsu użytkownika. na podstawie odpowiedzi serwera z punktu końcowego potwierdzenia identyfikatora (jeśli istnieje).
  • Auto-Selected Flag API: powiadomienie dostawcy tożsamości (IdP) i strony uzależnionej, jeśli w procesie automatycznie wybrano dane logowania.

Interfejs API stanu logowania

Interfejs Login Status API to mechanizm, za pomocą którego witryna, a zwłaszcza dostawca tożsamości, stan logowania użytkownika w przeglądarce u dostawcy tożsamości. Dzięki niemu przeglądarka może zredukowanie niepotrzebnych żądań do dostawcy tożsamości i łagodzenie potencjalnych ataków czasowych.

Poinformuj przeglądarkę o stanie logowania użytkownika

Dostawcy tożsamości mogą informować przeglądarkę o stanie logowania użytkownika, wysyłając nagłówek HTTP lub przez wywołanie interfejsu JavaScript API, gdy użytkownik jest zalogowany u dostawcy tożsamości. użytkownik został wylogowany ze wszystkich kont dostawcy tożsamości. Dla każdego dostawcy tożsamości (określanego przez config URL), przeglądarka przechowuje zmienną tristate reprezentującą stan logowania. z możliwymi wartościami logged-in, logged-out i unknown. Stan domyślny jest unknown.

Aby zasygnalizować, że użytkownik jest zalogowany, wyślij nagłówek HTTP Set-Login: logged-in. w nawigacji najwyższego poziomu lub w żądaniu zasobu podrzędnego tego samego źródła:

Set-Login: logged-in

Możesz też wywołać interfejs JavaScript API navigator.login.setStatus('logged-in') ze źródła dostawcy tożsamości:

navigator.login.setStatus('logged-in');

W tych wywołaniach stan logowania użytkownika jest rejestrowany jako logged-in. Gdy użytkownik się loguje stan jest ustawiony na logged-in, program RP wywołujący FedCM wysyła żądania do dostawcy tożsamości konta wyświetlają punkty końcowe i wyświetla dostępne konta użytkownikowi w FedCM. .

Aby zasygnalizować, że użytkownik został wylogowany ze wszystkich kont, wyślij nagłówek HTTP Set-Login: logged-out w nawigacji najwyższego poziomu lub w zasobie podrzędnym tej samej domeny żądanie:

Set-Login: logged-out

Możesz też wywołać interfejs JavaScript API navigator.login.setStatus('logged-out') przy użyciu dostawcy tożsamości pochodzenie:

navigator.login.setStatus('logged-out');

W tych wywołaniach stan logowania użytkownika jest rejestrowany jako logged-out. Gdy użytkownik się loguje stan to logged-out, nie można automatycznie wywołać FedCM do punktu końcowego listy kont dostawcy tożsamości.

Stan unknown jest ustawiany, zanim dostawca tożsamości wyśle sygnał za pomocą danych logowania. Status API. Wprowadziliśmy ten stan, aby ułatwić przejście, ponieważ użytkownik może muszą już zalogować się u dostawcy tożsamości, gdy wysyłamy ten interfejs API. Dostawca tożsamości może nie mieć zasygnalizuje to przeglądarce przed wywołaniem FedCM. W W tym przypadku wysyłamy żądanie do punktu końcowego listy kont dostawcy tożsamości i aktualizujemy wartość stan na podstawie odpowiedzi z punktu końcowego listy kont:

  • Jeśli punkt końcowy zwraca listę aktywnych kont, zmień stan na logged-in i otwórz okno FedCM, aby wyświetlić te konta.
  • Jeśli punkt końcowy nie zwraca żadnych kont, zaktualizuj stan na logged-out i nie powiedzie się w FedCM.

Co się stanie, gdy sesja użytkownika wygaśnie? Pozwól użytkownikowi na logowanie się za pomocą dynamicznego procesu logowania.

Mimo że dostawca tożsamości informuje przeglądarkę o stanie logowania użytkownika, może być niezsynchronizowany, np. gdy sesja wygaśnie. Przeglądarka próbuje wysyłania z danymi uwierzytelniającymi żądania do punktu końcowego listy kont, gdy logowanie stan to logged-in, ale serwer nie zwraca żadnych kont, ponieważ sesja jest nie są już dostępne. W takim przypadku przeglądarka może dynamicznie umożliwić użytkownik może zalogować się u dostawcy tożsamości w oknie.

W oknie FedCM pojawi się komunikat sugerujący zalogowanie się, tak jak na ilustracji poniżej.

Okno FedCM z sugestiami zalogowania się u dostawcy tożsamości.
Okno FedCM z prośbą o zalogowanie się u dostawcy tożsamości.

Gdy użytkownik kliknie przycisk Dalej, przeglądarka otworzy okno stronie logowania dostawcy tożsamości.

Przykładowe okno.
Przykładowe okno dialogowe wyświetlane po kliknięciu przycisku logowania u dostawcy tożsamości.
.

Adres URL strony logowania jest określony za pomocą parametru login_url w ramach konfiguracji dostawcy tożsamości .

{
  "accounts_endpoint": "/auth/accounts",
  "client_metadata_endpoint": "/auth/metadata",
  "id_assertion_endpoint": "/auth/idtokens",
  "login_url": "/login"
  }
}

Jest to zwykłe okno przeglądarki z własnymi plikami cookie. Cokolwiek odbywa się w oknie dialogowym należy do dostawcy tożsamości i nie są dostępne żadne uchwyty okien. aby wysłać żądanie komunikacji z innej domeny do strony RP. Gdy użytkownik zalogowany użytkownik, dostawca tożsamości powinien:

  • Wyślij nagłówek Set-Login: logged-in lub wywołaj navigator.login.setStatus("logged-in") interfejsu API, aby poinformować przeglądarkę, że Użytkownik został zalogowany.
  • Aby zamknąć okno, zadzwoń pod numer IdentityProvider.close().
.
Użytkownik loguje się w RPA po zalogowaniu się u dostawcy tożsamości przy użyciu FedCM.
Użytkownik loguje się w RPA po zalogowaniu się u dostawcy tożsamości za pomocą FedCM.
.

Możesz wypróbować interfejs Login Status API w naszej wersji demonstracyjnej.

  1. Kliknij przycisk Otwórz stronę dostawcy tożsamości i zaloguj się.
  2. Zaloguj się na dowolne konto.
  3. W menu Stan konta wybierz Sesja wygasła.
  4. Kliknij przycisk Zaktualizuj dane osobowe.
  5. Kliknij przycisk Odwiedź RP, aby wypróbować FedCM.

Logowanie do dostawcy tożsamości powinno być widoczne w działaniu modułu.

Interfejs API błędów

Gdy Chrome wysyła żądanie do punktu końcowego potwierdzenia identyfikatora (na przykład gdy użytkownik klika przycisk Kontynuuj jako w interfejsie FedCM lub podczas automatycznego ponownego uwierzytelniania. ), dostawca tożsamości może nie być w stanie wydać tokena z uzasadnionych powodów. Jeśli na przykład klient jest nieautoryzowany, serwer tymczasowo niedostępny itd. Obecnie Chrome odrzuca żądanie bez żadnego powiadomienia w przypadku Takie błędy i jedynie powiadamia RP, odrzucając obietnicę.

Użycie interfejsu Error API w Chrome powiadamia użytkownika, wyświetlając natywny interfejs z informacjami o błędzie podanymi przez dostawcy tożsamości.

Okno FedCM wyświetlające komunikat o błędzie po nieudanej próbie logowania użytkownika. Ciąg znaków jest powiązany z typem błędu.
Okno FedCM wyświetlające komunikat o błędzie po nieudanej próbie zalogowania się użytkownika. Ciąg znaków jest powiązany z typem błędu.

Interfejs API HTTP dostawcy tożsamości

W odpowiedzi id_assertion_endpoint dostawca tożsamości może zwrócić token przeglądarki, jeśli może zostać wydany na żądanie. W tej ofercie, jeśli token nie można wysłać, dostawca tożsamości może zwrócić „błąd” zawiera ona 2 nowe pola opcjonalne:

  1. code
  2. url
// id_assertion_endpoint response
{
  "error": {
     "code": "access_denied",
     "url": "https://idp.example/error?type=access_denied"
  }
}

W przypadku kodu dostawca tożsamości może wybrać jeden ze znanych błędów z OAuth 2.0 określony błąd lista [invalid_request, unauthorized_client, access_denied, server_error i temporarily_unavailable] lub użyć dowolnego ciągu. Jeśli to drugie, Chrome renderuje interfejs błędu z ogólnym komunikatem o błędzie i przekazuje kod do RP.

W języku url identyfikuje czytelną dla człowieka stronę internetową z informacjami na temat , aby przekazać użytkownikom dodatkowe informacje o tym błędzie. To pole jest przydatne dla użytkowników, ponieważ przeglądarki nie mogą wyświetlać szczegółowych komunikatów o błędach Interfejs. Mogą to być na przykład linki do dalszych kroków, dane kontaktowe działu obsługi klienta i tak dalej. Jeśli użytkownik chce dowiedzieć się więcej o szczegółach błędu i sposobie jego naprawienia, użytkownik może odwiedzić podaną stronę w interfejsie przeglądarki, aby uzyskać więcej informacji. Adres URL musi znajdować się w tej samej witrynie co dostawca tożsamości configURL.

try {
  const cred = await navigator.credentials.get({
    identity: {
      providers: [
        {
          configURL: 'https://idp.example/manifest.json',
          clientId: '1234',
        },
      ],
    }
  });
} catch (e) {
  const code = e.code;
  const url = e.url;
}

Interfejs Auto-Selected Flag API

mediation: optional to domyślne zapośredniczenie użytkownika zachowanie w interfejsie Credential Management API i aktywuje automatyczne ponowne uwierzytelnianie jak to tylko możliwe. Jednak automatyczne ponowne uwierzytelnianie może być niedostępny z tych powodów: wie tylko przeglądarka; gdy jest ona niedostępna, użytkownik może zostać poproszony o zalogowanie się za pomocą jawnej zapośredniczenia użytkowników, która obejmuje różne właściwości.

  • Z punktu widzenia osoby wywołującej interfejs API po otrzymaniu tokena tożsamości nie mieć wgląd w to, czy nastąpiło automatyczne ponowne uwierzytelnienie; przepływu danych. Utrudnia im to ocenę wydajności interfejsu API i zwiększanie z myślą o ich UX.
  • Z punktu widzenia dostawcy tożsamości nie jest on w stanie określić, czy ponowne uwierzytelnianie w przypadku oceny wydajności. Ponadto bezpośrednie zapośredniczenie użytkownika może zwiększyć związanych z bezpieczeństwem. Na przykład niektórzy użytkownicy mogą preferować wyższą poziomu zabezpieczeń, który wymaga wyraźnego zapośredniczenia użytkownika podczas uwierzytelniania. Jeśli Dostawca tożsamości otrzymuje żądanie tokena bez takiego zapośredniczenia, może obsłużyć może prosić o coś w inny sposób. Zwróć na przykład kod błędu, tak aby RP mogła ponownie wywołać interfejs FedCM API za pomocą parametru mediation: required.

Dlatego zapewnienie widoczności procesu automatycznego ponownego uwierzytelniania z korzyścią dla deweloperów.

Interfejs Auto-selected Flag API Chrome informuje, czy użytkownik uzyskał wyraźne pozwolenie, klikając Przycisk Kontynuuj jako z dostawcą tożsamości i RP przy każdym automatycznym ponownym uwierzytelnianiu lub pośrednictwa w sprzedaży. Udostępnianie następuje dopiero po tym, jak użytkownik jest przyznawane uprawnienia do komunikacji z dostawcą tożsamości/RP.

Udostępnianie dostawcy tożsamości

Aby udostępnić informacje uprawnienia użytkownika do publikowania dostawcy tożsamości, Chrome obejmuje is_auto_selected=true w żądaniu POST wysłanym do id_assertion_endpoint:

POST /fedcm_assertion_endpoint HTTP/1.1
Host: idp.example
Origin: https://rp.example/
Content-Type: application/x-www-form-urlencoded
Cookie: 0x23223
Sec-Fetch-Dest: webidentity

account_id=123&client_id=client1234&nonce=Ct0D&disclosure_text_shown=true&is_auto_selected=true

Udostępnianie RP

Przeglądarka może udostępnić informacje grupie objętej ograniczeniami w isAutoSelected przez IdentityCredential:

const cred = await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: 'https://idp.example/manifest.json',
      clientId: '1234'
    }]
  }
});

if (cred.isAutoSelected !== undefined) {
  const isAutoSelected = cred.isAutoSelected;
}

Angażuj odbiorców i dziel się opiniami

Jeśli podczas testowania będziesz mieć jakieś uwagi lub problemy, możesz je przesłać o crbug.com.

Zdjęcie: Girl w czerwonym kapeluszu na kanale Unsplash