Ten przewodnik opisuje zbiór funkcji, które zwracają dodatkowe sygnały zaufania dotyczące konta Google. Te sygnały zaufania pomagają systemowi zarządzania kontami podejmować decyzje na podstawie ryzyka podczas rejestracji i tworzenia konta oraz później w przypadku powracających użytkowników.
Sesje
Żądanie uwierzytelnienia wysłane przez aplikację zwraca token identyfikatora. Na przykład po naciśnięciu przycisku Zaloguj się przez Google token identyfikatora jest zwracany do aplikacji klienckiej lub serwerowej na Androida, iOS lub w internecie, która wyświetla ten przycisk.
Uwierzytelnianie w celu zalogowania się na konto Google to osobne zdarzenie. Roszczenia zwrócone w tokenie identyfikatora reprezentują to zdarzenie. Na przykład czas uwierzytelniania i metody użyte do zalogowania się na konto Google.
Występują 2 momenty uwierzytelniania i 2 sesje użytkownika:
- Sesja użytkownika <-> Google – nawiązywana, gdy użytkownik loguje się na swoje konto Google. Google zarządza cyklem życia i bezpieczeństwem tej sesji. Roszczenia
auth_timeiamrdostarczają informacji o tej sesji. - Sesja użytkownika <-> Twoja aplikacja – nawiązywana po zalogowaniu się użytkownika w Twojej aplikacji, często inicjowana za pomocą funkcji Zaloguj się przez Google. Twoja aplikacja zarządza tą sesją za pomocą roszczeń, aby podejmować lepsze decyzje dotyczące zarządzania sesją i kontem.
Użytkownicy często korzystają z usług Google na różnych urządzeniach, takich jak telefony, komputery, inteligentne ekrany czy telewizory. Zalogowanie się na każdej platformie lub urządzeniu powoduje utworzenie osobnej sesji. W przypadku logowania w internecie sesja jest nawiązywana między konkretną przeglądarką a Google. Pamiętaj, że tryb przeglądania prywatnego i tryb incognito tworzą własne, odrębne sesje. Dlatego jedno konto Google może mieć jednocześnie wiele różnych sesji aktywnych w różnych przeglądarkach i na różnych urządzeniach. Więcej informacji znajdziesz w artykule Wyświetlanie urządzeń mających dostęp do konta.
Stan konta Google
Typowe zdarzenia w cyklu życia konta Google to:
- osoba zdecyduje się utworzyć konto Google, a następnie
- Google może wyłączyć konto, a użytkownik może je ponownie aktywować po wykonaniu czynności opisanych w artykule Jak odzyskać konto Google lub Gmaila.
- osoba może zdecydować się na usunięcie konta Google lub z powodu zasad dotyczących nieaktywnych kont Google Google może usunąć konto.
Funkcje pakietu zabezpieczeń opisane w tym przewodniku dotyczą aktywnych i wyłączonych kont, ale nie zdarzeń związanych z tworzeniem lub usuwaniem kont Google.
Google może w każdej chwili wyłączyć konto. Niektóre z przyczyn znajdziesz w artykule Twoje konto jest wyłączone. W takim przypadku wszystkie aktywne sesje Google zostaną zakończone, a usługa Ochrona wszystkich kont Google wyśle zdarzenie RISC. Wyłączone konta nie mogą korzystać z funkcji Zaloguj się przez Google, co oznacza, że token identyfikatora nigdy nie jest wydawany i nie można go używać do monitorowania wyłączonych kont użytkowników.
Otrzymywanie zdarzeń ochrony między kontami (RISC) jest opcjonalne, ale te zdarzenia stanowią ważne sygnały do zarządzania sesją między użytkownikiem a aplikacją. Instrukcje wdrażania RISC i reagowania na zdarzenia znajdziesz w artykule Ochrona kont użytkowników za pomocą ochrony międzykontowej.
Konfiguracja
Aby otrzymywać dodatkowe roszczenia, aplikacja musi być opublikowana, zweryfikowana i musi mieć włączone funkcje pakietu zabezpieczeń. Zacznij od potwierdzenia, że Twoja aplikacja jest opublikowana i zweryfikowana:
- Otwórz platformę uwierzytelniania Google.
- Wybieranie lub tworzenie projektu dla aplikacji
- Kliknij Odbiorcy i upewnij się, że Stan publikacji to W produkcji.
- Kliknij Centrum weryfikacji i sprawdź, czy Stan weryfikacji to Zweryfikowano.
Następnie włącz dodatkowe roszczenia:
- W menu kliknij Ustawienia.
- W sekcji Ustawienia zaawansowane wybierz:
- Roszczenia dotyczące wieku sesji, aby włączyć
auth_time - Deklaracje siły uwierzytelniania, aby włączyć
amr
- Roszczenia dotyczące wieku sesji, aby włączyć
Więcej informacji znajdziesz w Centrum pomocy dotyczącego weryfikacji aplikacji OAuth.
Obsługiwane funkcje
W tej sekcji opisujemy poszczególne funkcje wchodzące w skład pakietu zabezpieczeń.
Odwołania do metod uwierzytelniania
Authentication Methods References (amr) to deklaracja OpenID Connect, która opisuje metody użyte podczas ostatniego uwierzytelniania między użytkownikiem a Google.
Z możliwych wartości IANA.AMR Google obsługuje te wartości, które oznaczają, że:
hwkużyto fizycznego klucza bezpieczeństwa.mfaUwierzytelnianie wielopoziomowe zostało zakończonepwdużyto hasłaswkużyto klucza programowego, takiego jak klucz dostępu.smsdo weryfikacji użyto SMS-a;teldo weryfikacji użyto połączenia telefonicznego;
Co najmniej jedna z tych wartości jest zwracana jako tablica ciągów znaków JSON w deklaracji amr tokena tożsamości.
Deklaracja amr jest uwzględniana w tokenie identyfikatora tylko wtedy, gdy dostępne są informacje o użytej metodzie uwierzytelniania. Może nie być obecna nawet wtedy, gdy jest wymagana.
Właściciele kont Google mogą wymagać weryfikacji dwuetapowej i wybrać metody uwierzytelniania wieloskładnikowego, których chcą używać.
Gdy na koncie Google jest włączona ochrona zaawansowana, wymagana jest silna metoda weryfikacji dwuetapowej, np. klucze bezpieczeństwa Titan (hwk) lub klucz dostępu (swk). W obu przypadkach wartość mfa jest obecna, gdy podczas logowania na konto Google używany jest więcej niż 1 czynnik.
Obecność mfa potwierdza, że zdarzenie uwierzytelniania spełnia wymagania Google dotyczące uwierzytelniania wielopoziomowego. Na przykład uwierzytelnianie na koncie Google za pomocą hasła (pwd) i klucza dostępu (swk) powoduje powstanie tego roszczenia: "amr": ["mfa", "pwd", "swk"].
Więcej informacji o bezpieczeństwie konta i uwierzytelnianiu użytkowników znajdziesz w tych artykułach: Najlepsze zabezpieczenia konta Google w ramach programu ochrony zaawansowanej, Logowanie się za pomocą klucza dostępu zamiast hasła i Weryfikacja dwuetapowa z użyciem klucza bezpieczeństwa.
Administratorzy Workspace kontrolują zasady uwierzytelniania w przypadku zarządzanych kont Workspace i mogą wymagać uwierzytelniania wieloskładnikowego lub używania kluczy zabezpieczeń. Więcej informacji znajdziesz w artykułach Omówienie zarządzania tożsamością w Google i Wymaganie uwierzytelniania wieloskładnikowego w Google Cloud oraz w sekcji Zabezpieczenia i ustawienia logowania.
Czas uwierzytelniania
auth_timeRoszczenie jest standardową częścią protokołu OpenID Connect, która zawiera informacje o tym, kiedy użytkownik końcowy ostatnio uwierzytelnił się w Google. Jest to liczba JSON reprezentująca liczbę sekund, które upłynęły od epoki uniksowej (1 stycznia 1970 r., 00:00:00 UTC). Jest to czas ostatniego uwierzytelnienia użytkownika. Jest to sygnatura czasowa wskazująca ostatnie logowanie użytkownika na konto Google na bieżącym urządzeniu lub w przeglądarce.
To roszczenie jest zawarte w tokenie identyfikatora, czyli tokenie internetowym JSON (JWT), który zawiera zweryfikowane informacje o uwierzytelnianiu i użytkowniku.
Roszczenie auth_time jest przydatne w Twojej aplikacji, ponieważ pozwala określić, jak niedawno użytkownik aktywnie zalogował się na konto Google na używanym urządzeniu lub w przeglądarce. Może to być szczególnie ważne ze względów bezpieczeństwa, np. w przypadku:
Podejmowanie świadomych decyzji o tym, czy przed wykonaniem przez użytkownika działań związanych z poufnymi danymi, takich jak usunięcie konta, zmiana metod kontaktu z kontem czy dokonanie płatności, aplikacja powinna wyświetlić dodatkowy test zabezpieczający. Google nie obsługuje próśb o ponowne uwierzytelnienie konta Google.
Wykorzystywanie aktualności i stabilności sesji na koncie Google użytkownika jako wskaźnika zaufania. Ogólnie rzecz biorąc, niedawna wartość
auth_timewskazuje na aktualność, a starsza wartość – na stabilność.
W przypadku aplikacji internetowych sesję stanowi połączenie przeglądarki i systemu operacyjnego użytkownika po zalogowaniu się na konto Google.
Niezależnie od tego Twoja witryna utrzymuje też osobną sesję użytkownika. Nowsza
auth_time wartość oznacza, że użytkownik niedawno zalogował się na swoje konto Google.
Często jest to oznaka aktywnego i zaangażowanego użytkownika, co można interpretować jako sygnał mniejszego ryzyka.
Na platformach mobilnych, takich jak Android, użytkownicy zwykle logują się bezpośrednio na urządzeniu za pomocą metod biometrycznych, takich jak skanowanie odcisków palców lub twarzy, oraz za pomocą kodu PIN lub wzoru odblokowania urządzenia. Aplikacje i platformy mobilne często korzystają z tych metod uwierzytelniania opartych na platformie zamiast tworzyć nową sesję w Google. W rezultacie rzadko logują się na konto Google i odpowiednio rzadko aktualizują wartość auth_time. W takim przypadku ostatnia wartość auth_time może sygnalizować zmianę w długotrwałej sesji na koncie Google, a tym samym zwiększone ryzyko.
Wskaźniki zaufania to złożony temat. auth_time ma być używany wraz z innymi sygnałami, takimi jak włączenie uwierzytelniania wielopoziomowego (MFA), użyta metoda uwierzytelniania i czas trwania sesji użytkownika między aplikacją a platformą.
Żądania
Konkretna metoda używana do żądania roszczeń auth_time i amr różni się w zależności od używanego interfejsu API, ale każdy interfejs API zawiera opcjonalny parametr claims do żądania roszczeń auth_time i amr.
Protokół OIDC
Jeśli korzystasz bezpośrednio z platformy OAuth, poproś o auth_time, dodając go do opcjonalnego parametru żądania claims. Ustaw wartość pola id_token w obiekcie JSON roszczeń na {"auth_time":{"essential":true}}.
Podobnie dodaj {"amr":{"essential":true}} do claims, aby poprosić o amr:
https://accounts.google.com/o/oauth2/v2/auth? response_type=id_token& client_id=YOUR_CLIENT_ID& scope=openid email profile& redirect_uri=https://example.com/user-login& nonce=123-456-7890& claims={ "id_token": { "auth_time": { "essential":true }, "amr": {"essential":true} } }
Więcej informacji znajdziesz w artykule OpenID Connect.
GIS w przeglądarce
Biblioteka Zaloguj się przez Google na stronach internetowych ma 2 interfejsy API: HTML i JavaScript, które umożliwiają żądanie dodatkowych deklaracji. Na przykład poproś o auth_time i amr
za pomocą interfejsu JavaScript API:
<html>
<body>
<script src="https://accounts.google.com/gsi/client" async></script>
<script>
window.onload = function () {
google.accounts.id.initialize({
client_id: "YOUR_WEB_CLIENT_ID",
callback: function(rsp) { console.log(rsp.credential); },
essential_claims: "auth_time, amr",
});
google.accounts.id.renderButton(
document.getElementById("buttonDiv"),
{ type: "standard", size: "large" }
);
}
</script>
<div id="buttonDiv"></div>
</body>
</html>Więcej informacji znajdziesz w artykule Logowanie się za pomocą Google w internecie.
GIS na Androida
Do żądania auth_time i amr używane są metoda setClaims i obiekt Claim.
Zaktualizuj zależności kompilacji, aby używać najnowszych wersji bibliotek androidx.credentials:credentials-play-services-auth i com.google.android.libraries.identity.googleid:googleid.
Utwórz instancje obiektów Claim typu auth_time i amr, używając setClaims, aby dodać je do listy opcji logowania:
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder() .setAutoSelectEnabled(true) .setFilterByAuthorizedAccounts(true) .setServerClientId(WEB_CLIENT_ID) .setNonce("NONCE") .setClaims(ImmutableList.of( new Claim("auth_time", true), new Claim("amr", true) )) .build()
Więcej informacji znajdziesz w artykule Uwierzytelnianie użytkowników za pomocą funkcji Zaloguj się przez Google.
iOS
Pakiet Sign in with Google SDK na iOS dodaje do klasy GIDSignIn obiekt authTimeClaim i parametr claims, które służą do opcjonalnego wysyłania żądań dotyczących auth_time i amr.
Aplikacje korzystające z ASWebAuthenticationSession aktualizują wspólny plik cookie na poziomie urządzenia. GIDSignIn domyślnie korzysta z tej metody w systemie iOS 12 lub nowszym i macOS 10.15 lub nowszym. W tym scenariuszu użytkownik logujący się na swoje konto Google jest uwierzytelniany, a sesja jest przechowywana we wspólnym pojemniku na pliki cookie.
auth_time to ostatnie uwierzytelnianie użytkownika w Google na urządzeniu, a nie tylko w Twojej aplikacji.
SFSafariViewController, WKWebView i UIWebView działają w izolowanych piaskownicach w Twojej aplikacji, więc unikaj ich używania podczas korzystania z auth_time. Wartość auth_time to ostatnie logowanie użytkownika w samej aplikacji. Ponieważ wartość jest zawsze aktualna, ma mniejsze znaczenie.
Aby poprosić o auth_time, zaktualizuj zależności GoogleSignIn do najnowszej wersji i utwórz obiekt authTimeClaim, dodając go do zbioru claims.
Aby poprosić o utworzenie obiektu amr i dodanie go do zbioru claims, użyj polecenia amrClaim.
Swift
Dodaj zestaw roszczeń do metody GIDSignIn.sharedInstance.signIn:
let authTimeClaim = GIDClaim.authTime() let amrClaim = GIDClaim.amr() let claims = Set([authTimeClaim, amrClaim])// Start the sign-in process GIDSignIn.sharedInstance.signIn( withPresenting: rootViewController, claims: claims ) { signInResult, error in guard let result = signInResult else { print("Error signing in: (error?.localizedDescription ?? "No error description")") return } // If sign in succeeded, display the app's main content View print("ID Token: (result.user.idToken?.tokenString ?? "No token")") }
Objective-C
Dodaj zestaw roszczeń do metody signInWithPresentingViewController:
GIDClaim *authTimeClaim = [GIDClaim authTimeClaim]; GIDClaim *AMRClaim = [GIDClaim AMRClaim]; NSSet *claims = [NSSet setWithArray:@[authTimeClaim, AMRClaim]];// Include the claims set and start the sign-in process [GIDSignIn.sharedInstance signInWithPresentingViewController:self hint:nil claims:claims completion:^(GIDSignInResult * _Nullable signInResult, NSError * _Nullable error) { // On success signInResult.user.idToken // contains the requested claims. }];
Więcej informacji znajdziesz w artykule Integrowanie logowania przez Google z aplikacją na iOS lub macOS.
Odpowiedzi
Gdy w żądaniu znajdują się roszczenia auth_time lub amr, są one zwracane w odpowiedzi z ładunkiem tokena identyfikatora wraz z innymi standardowymi roszczeniami, takimi jak iss (wystawca), sub (podmiot), aud (odbiorca) i exp (czas wygaśnięcia).
Brakujące roszczenia są prawdopodobnie spowodowane tym, że aplikacja nie została zweryfikowana lub dodatkowe ustawienia są wyłączone (jest to ustawienie domyślne). Aby potwierdzić, że używany identyfikator klienta i aplikacja są zweryfikowane, a dodatkowe roszczenia są włączone, postępuj zgodnie z instrukcjami w sekcji Konfiguracja.
Wartość deklaracji auth_time to liczba JSON reprezentująca liczbę sekund, które upłynęły od epoki uniksowej (1 stycznia 1970 r., 00:00:00 UTC) do ostatniego uwierzytelnienia użytkownika.
Wartość deklaracji amr to tablica ciągów JSON reprezentująca metody uwierzytelniania użyte podczas ostatniego logowania na konto Google.
Oto przykład zdekodowanego tokena identyfikatora, który zawiera roszczenia auth_time i amr:
{ "iss": "https://accounts.google.com", "azp": "YOUR_CLIENT_ID", "aud": "YOUR_CLIENT_ID", "sub": "117726431651943698600", "email": "alice@example.com", "email_verified": true, "nonce": "123-456-7890", "auth_time": 1748875426, "amr": ["mfa", "pwd", "tel"], "nbf": 1748880889, "name": "Elisa Beckett", "picture": "https://lh3.googleusercontent.com/a/default-user=s96-c", "given_name": "Elisa", "family_name": "Beckett", "iat": 1748881189, "exp": 1748884789, "jti": "8b5d7ce345787d5dbf14ce6e08a8f88ee8c9b5b1" }
Token identyfikatora zawiera też roszczenie iat (issued at), które wskazuje czas wystawienia tokena JWT. Porównując deklaracje iat i auth_time, możesz określić czas, który upłynął od ostatniego uwierzytelnienia użytkownika do momentu utworzenia konkretnego tokena identyfikatora. Jeśli na przykład wartość iat to 1748881189, a wartość auth_time to 1748875426, różnica wynosi 5763 sekundy, czyli 1 godzinę, 36 minut i 3 sekundy.