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.
Konfiguracja
Aby otrzymywać dodatkowe roszczenia, aplikacja musi być opublikowana, zweryfikowana i musi mieć włączone funkcje pakietu zabezpieczeń.
Aby sprawdzić, czy aplikacja została opublikowana i zweryfikowana:
- Otwórz Platformę uwierzytelniania Google
- Wybieranie lub tworzenie projektu dla aplikacji
- W menu kliknij Odbiorcy.
- Sprawdź, czy Stan publikacji to W produkcji.
- W menu kliknij Centrum weryfikacji.
Sprawdź, czy Stan weryfikacji to Zweryfikowano.
Więcej informacji znajdziesz w Centrum pomocy dotyczącego weryfikacji aplikacji OAuth.
Aby włączyć roszczenie auth_time:
- Otwórz Platformę uwierzytelniania Google
- Wybieranie lub tworzenie projektu dla aplikacji
- W menu kliknij Ustawienia.
- W sekcji Ustawienia zaawansowane wybierz Deklaracje dotyczące wieku sesji, aby włączyć tę funkcję.
auth_time
Obsługiwane funkcje
W tej sekcji opisujemy poszczególne funkcje wchodzące w skład pakietu zabezpieczeń.
auth_time
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ń wymagających większej ochrony, 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 sygnału 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, którą 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 odcisku palca lub twarzy, oraz kodu PIN lub wzoru odblokowywania 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 dochodzi do logowania na konto Google i odpowiednich aktualizacji auth_time. 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ą.
Żądanie auth_time
Konkretna metoda używana do żądania roszczenia auth_time różni się w zależności od używanego interfejsu API, ale każdy interfejs API zawiera opcjonalny parametr claims do żądania auth_time.
Protokół OIDC
Jeśli korzystasz bezpośrednio z platformy OAuth, poproś o auth_time, dodając go do parametru żądania opcjonalnych roszczeń. Ustaw wartość pola id_token obiektu JSON roszczeń na {"auth_time":{"essential":true}}. Na przykład:
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}}}
Więcej informacji znajdziesz w artykule OpenID Connect.
GIS w przeglądarce
Biblioteka Logowanie przez Google na stronach internetowych ma 2 interfejsy API: HTML i JavaScript, które umożliwiają wysyłanie żądań dodatkowych roszczeń. Na przykład poproś o auth_time 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",
});
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 wysyłania żądań auth_time 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 instancję obiektu Claim typu auth_time, używając setClaims, aby dodać opcje logowania:
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder() .setAutoSelectEnabled(true) .setFilterByAuthorizedAccounts(true) .setServerClientId(WEB_CLIENT_ID) .setNonce("NONCE") .setClaims(ImmutableList.of(new Claim("auth_time", true))) .build()
Więcej informacji znajdziesz w artykule Uwierzytelnianie użytkowników za pomocą funkcji Zaloguj się przez Google.
iOS
Pakiet SDK Logowanie przez Google na iOS dodaje do klasy GIDSignIn obiekt authTimeClaim i parametr claims, które służą do opcjonalnego wysyłania żądań auth_time.
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 oraz macOS 12.16 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 Oznacza ostatnie uwierzytelnianie użytkownika w Google na urządzeniu, a nie tylko w Twojej aplikacji.
Usługi SFSafariViewController, WKWebView i UIWebView działają w izolowanych piaskownicach w Twojej aplikacji. Unikaj ich używania podczas korzystania z usługi auth_time. Wartość ta
auth_time oznacza ostatnie logowanie użytkownika w samej aplikacji. Ponieważ 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.
Swift
Dodaj zestaw roszczeń do metody GIDSignIn.sharedInstance.signIn:
let authTimeClaim = GIDClaim.authTime() let claims = Set([authTimeClaim])// 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]; NSSet *claims = [NSSet setWithObject:authTimeClaim];// 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.
Odpowiedź auth_time
Gdy roszczenie auth_time jest zawarte w żądaniu, pojawia się w odpowiedzi z ładunkiem tokena identyfikacyjnego wraz z innymi standardowymi roszczeniami, takimi jak iss (wystawca), sub (podmiot), aud (odbiorca) i exp (czas wygaśnięcia). Wartość roszczenia 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 momentu ostatniego uwierzytelnienia użytkownika. To przykład zdekodowanego tokena identyfikatora
zawierającego roszczenie auth_time:
{ "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, "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 tożsamości zawiera też deklarację iat (issued at), która 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.