Pakiet zabezpieczeń

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_timeamr dostarczają 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:

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:

  1. Otwórz platformę uwierzytelniania Google.
  2. Wybieranie lub tworzenie projektu dla aplikacji
  3. Kliknij Odbiorcy i upewnij się, że Stan publikacji to W produkcji.
  4. Kliknij Centrum weryfikacji i sprawdź, czy Stan weryfikacji to Zweryfikowano.

Następnie włącz dodatkowe roszczenia:

  1. W menu kliknij Ustawienia.
  2. W sekcji Ustawienia zaawansowane wybierz:
    • Roszczenia dotyczące wieku sesji, aby włączyć auth_time
    • Deklaracje siły uwierzytelniania, aby włączyć amr

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:

  • hwk użyto fizycznego klucza bezpieczeństwa.
  • mfa Uwierzytelnianie wielopoziomowe zostało zakończone
  • pwd użyto hasła
  • swk użyto klucza programowego, takiego jak klucz dostępu.
  • sms do weryfikacji użyto SMS-a;
  • tel do 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łaWeryfikacja 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_time wskazuje 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_timeamr 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_timeamr.

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_timeamr 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_timeamr używane są metoda setClaims i obiekt Claim.

Zaktualizuj zależności kompilacji, aby używać najnowszych wersji bibliotek androidx.credentials:credentials-play-services-authcom.google.android.libraries.identity.googleid:googleid.

Utwórz instancje obiektów Claim typu auth_timeamr, 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_timeamr.

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, WKWebViewUIWebView 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_timeamr:

{
  "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 iatauth_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.