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.
Gdy użytkownik kliknie przycisk Dalej, przeglądarka otworzy okno stronie logowania 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łajnavigator.login.setStatus("logged-in")
interfejsu API, aby poinformować przeglądarkę, że Użytkownik został zalogowany. - Aby zamknąć okno, zadzwoń pod numer
IdentityProvider.close()
.
Możesz wypróbować interfejs Login Status API w naszej wersji demonstracyjnej.
- Kliknij przycisk Otwórz stronę dostawcy tożsamości i zaloguj się.
- Zaloguj się na dowolne konto.
- W menu Stan konta wybierz Sesja wygasła.
- Kliknij przycisk Zaktualizuj dane osobowe.
- 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.
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:
code
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