Sicherheit im Paket

In dieser Anleitung werden eine Reihe von Funktionen beschrieben, die zusätzliche Device-Trust-Signale zu einem Google-Konto zurückgeben. Diese Device-Trust-Signale helfen Ihrem Kontoverwaltungssystem, risikobasierte Entscheidungen bei der Registrierung, Kontoerstellung und später für wiederkehrende Nutzer zu treffen.

Einrichtung

Damit Sie zusätzliche Ansprüche erhalten können, muss Ihre App veröffentlicht und bestätigt sein und die Funktionen des Security Bundle müssen aktiviert sein.

So prüfen Sie, ob Ihre App veröffentlicht und bestätigt ist:

  1. Öffnen Sie die Google Auth Platform.
  2. Wählen Sie das Projekt für Ihre App aus oder erstellen Sie es.
  3. Klicken Sie im Menü auf Zielgruppe.
  4. Prüfen Sie, ob der Veröffentlichungsstatus In Produktion lautet.
  5. Klicken Sie im Menü auf Bestätigungscenter.
  6. Prüfen Sie, ob der Bestätigungsstatus Bestätigt lautet.

    Weitere Informationen finden Sie in der Hilfe zur OAuth-App-Bestätigung.

So aktivieren Sie den Anspruch auth_time:

  1. Öffnen Sie die Google Auth Platform.
  2. Wählen Sie das Projekt für Ihre App aus oder erstellen Sie es.
  3. Klicken Sie im Menü auf Einstellungen.
  4. Wählen Sie unter Erweiterte Einstellungen die Option Ansprüche zur Sitzungsdauer aus, um auth_time zu aktivieren.

Unterstützte Funktionen

In diesem Abschnitt werden die einzelnen Funktionen beschrieben, aus denen sich das Security Bundle zusammensetzt.

auth_time

Der auth_time Anspruch ist ein Standardbestandteil des OpenID Connect-Protokolls der Informationen darüber liefert, wann sich der Endnutzer zuletzt authentifiziert hat bei Google. Es handelt sich um eine JSON-Zahl, die die Anzahl der Sekunden angibt, die seit der Unix-Epoche (1. Januar 1970, 00:00:00 UTC) vergangen sind. Sie gibt den Zeitpunkt an, zu dem sich der Nutzer zuletzt authentifiziert hat. Sie können sich das als Zeitstempel vorstellen, der das letzte Anmeldeereignis des Nutzers in seinem Google-Konto auf dem aktuellen Gerät oder im aktuellen Browser angibt. Dieser Anspruch ist im ID-Token enthalten, einem JSON-Web-Token (JWT), das bestätigte Informationen zur Authentifizierung und zum Nutzer enthält.

Der Anspruch auth_time ist für Ihre Anwendung wertvoll, da Sie damit feststellen können, wie lange es her ist, dass sich ein Nutzer auf dem verwendeten Gerät oder im verwendeten Browser aktiv in einem Google-Konto angemeldet hat. Das kann aus Sicherheitsgründen besonders wichtig sein, z. B. in folgenden Fällen:

  • Sie können eine fundierte Entscheidung darüber treffen, ob Ihre App eine zusätzliche Step-up-Authentifizierung anfordern sollte, bevor sensible Nutzeraktionen ausgeführt werden, z. B. das Löschen des Kontos, das Ändern der Kontaktmethoden für das Konto oder das Ausführen einer Zahlung. Google unterstützt keine Anfragen zur erneuten Authentifizierung von Google-Konten.

  • Sie können die Aktualität und Stabilität der Google-Kontositzung des Nutzers als Vertrauenssignal verwenden. Im Allgemeinen deutet ein aktueller auth_time-Wert auf Aktualität hin, während ein älterer Wert auf Stabilität hindeutet.

Bei Webanwendungen bilden die Kombination aus Browser und Betriebssystem des Nutzers eine Sitzung, nachdem sich der Nutzer in seinem Google-Konto angemeldet hat. Unabhängig davon wird auf Ihrer Website auch eine separate Nutzersitzung verwaltet. Ein neuerer auth_time-Wert gibt an, dass sich der Nutzer vor Kurzem in seinem Google-Konto angemeldet hat. Das ist oft ein Hinweis auf einen aktiven, engagierten Nutzer und kann als Signal für ein geringeres Risiko interpretiert werden.

Auf mobilen Plattformen wie Android melden sich Nutzer in der Regel direkt auf ihrem Gerät an. Dazu verwenden sie biometrische Methoden wie Fingerabdruck oder Gesichtserkennung und gerätespezifische PINs oder Muster zum Entsperren. Mobile Apps und Plattformen verwenden häufig diese plattformbasierten Authentifizierungsmethoden, anstatt eine neue Sitzung mit Google zu erstellen. Das führt zu seltenen Anmeldungen im Google-Konto und entsprechenden Aktualisierungen von auth_time. Ein aktueller auth_time-Wert kann hier also auf eine Änderung an einer lang andauernden Google-Kontositzung und damit auf ein erhöhtes Risiko hindeuten.

Device-Trust-Signale sind ein komplexes Thema. auth_time sollte zusammen mit anderen Signalen verwendet werden, z. B. ob die Multi-Faktor-Authentifizierung (MFA) aktiviert ist, welche Authentifizierungsmethode verwendet wird und wie lange die Nutzersitzung zwischen Ihrer Anwendung und Ihrer Plattform dauert.

auth_time-Anfrage

Die spezifische Methode zum Anfordern des Anspruchs auth_time hängt von der verwendeten API ab. Jede API enthält jedoch einen optionalen Parameter claims, mit dem auth_time angefordert werden kann.

OIDC-Protokoll

Wenn Sie die OAuth-Plattform direkt verwenden, fordern Sie auth_time an, indem Sie sie dem optionalen Parameter für die Anforderung von Ansprüchen hinzufügen. Legen Sie für das Feld id_token des JSON-Objekts für Ansprüche den Wert {"auth_time":{"essential":true}} fest. Beispiel:

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}}}

Weitere Informationen finden Sie unter OpenID Connect.

Google Identity Services für das Web

Die Bibliothek „Über Google anmelden“ für das Web enthält zwei APIs: HTML und JavaScript, um zusätzliche Anforderungen anzufordern. Fordern Sie beispielsweise auth_time mit der JavaScript API an:

<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>

Weitere Informationen finden Sie unter Über Google anmelden für das Web.

Google Identity Services für Android

Zum Anfordern von auth_time werden eine setClaims-Methode und ein Claim-Objekt verwendet.

Aktualisieren Sie Ihre Build-Abhängigkeiten, um die neuesten Versionen der Bibliotheken androidx.credentials:credentials-play-services-auth und com.google.android.libraries.identity.googleid:googleid zu verwenden.

Instanziieren Sie ein Claim-Objekt vom Typ auth_time, und fügen Sie es mit setClaims den Anmeldeoptionen hinzu:

val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
    .setAutoSelectEnabled(true)
    .setFilterByAuthorizedAccounts(true)
    .setServerClientId(WEB_CLIENT_ID)
    .setNonce("NONCE")
    .setClaims(ImmutableList.of(new Claim("auth_time", true)))
    .build()

Weitere Informationen finden Sie unter Nutzer mit „Über Google anmelden“ authentifizieren.

iOS

Das SDK „Über Google anmelden“ für iOS fügt der Klasse GIDSignIn ein Objekt authTimeClaim und einen Parameter claims hinzu, mit denen optional auth_time angefordert werden kann.

Apps, die ASWebAuthenticationSession verwenden, aktualisieren einen geräteweiten gemeinsamen Cookie-Speicher. GIDSignIn verwendet diese Methode standardmäßig unter iOS 12 oder höher und macOS 12.16 oder höher. In diesem Fall wird ein Nutzer, der sich in seinem Google-Konto anmeldet, authentifiziert und die Sitzung wird im gemeinsamen Cookie-Speicher gespeichert. Hier ist auth_time die letzte Google-Authentifizierung des Nutzers auf dem Gerät, nicht nur in Ihrer App.

SFSafariViewController, WKWebView und UIWebView werden in isolierten Sandboxes in Ihrer App ausgeführt. Verwenden Sie sie nicht, wenn Sie auth_time verwenden. Hier ist auth_time die letzte Anmeldung des Nutzers in der App selbst. Da der Wert immer aktuell ist, ist er weniger aussagekräftig.

Wenn Sie auth_time anfordern möchten, aktualisieren Sie die GoogleSignIn-Abhängigkeiten auf die neueste Version und erstellen Sie ein authTimeClaim Objekt, das Sie dem claims Satz hinzufügen.

Swift

Fügen Sie den Anspruchssatz der Methode GIDSignIn.sharedInstance.signIn hinzu:

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

Fügen Sie den Anspruchssatz der Methode signInWithPresentingViewController hinzu:

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. }];

Weitere Informationen finden Sie unter Google Log-in in Ihre iOS- oder macOS-App einbinden.

auth_time-Antwort

Wenn der Anspruch auth_time in der Anfrage enthalten ist, wird er in der Antwort der ID-Token-Nutzlast zusammen mit anderen Standardansprüchen wie iss (Aussteller), sub (Subjekt), aud (Zielgruppe) und exp (Ablaufzeit) angezeigt. Der Wert des Anspruchs auth_time ist eine JSON-Zahl, die die Anzahl der Sekunden angibt, die seit der Unix-Epoche (1. Januar 1970, 00:00:00 UTC) bis zum Zeitpunkt der letzten Nutzerauthentifizierung vergangen sind. Hier ist ein Beispiel für ein decodiertes ID-Token, das den Anspruch auth_time enthält:

{
  "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"
}

Das ID-Token enthält auch einen Anspruch iat (ausgestellt am), der den Zeitpunkt angibt, zu dem das JWT ausgestellt wurde. Wenn Sie die Ansprüche iat und auth_time vergleichen, können Sie die Zeit ermitteln, die seit der letzten Authentifizierung des Nutzers bis zum Zeitpunkt der Erstellung des jeweiligen ID-Tokens vergangen ist. Wenn iat beispielsweise 1748881189 und auth_time 1748875426 ist, beträgt die Differenz 5763 Sekunden, was 1 Stunde, 36 Minuten und 3 Sekunden entspricht.