Sicherheit im Paket

In diesem Leitfaden werden eine Reihe von Funktionen beschrieben, die zusätzliche Vertrauenssignale für ein Google-Konto zurückgeben. Diese Vertrauenssignale helfen Ihrem Kontoverwaltungssystem, risikobasierte Entscheidungen bei der Registrierung, Kontoerstellung und später für wiederkehrende Nutzer zu treffen.

Einrichtung

Damit Ihre App zusätzliche Ansprüche erhalten kann, muss sie veröffentlicht und bestätigt sein und die Funktionen des Sicherheits-Bundles müssen aktiviert sein.

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

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

    Weitere Informationen

So aktivieren Sie den auth_time-Anspruch:

  1. Öffnen Sie die Google Auth Platform.
  2. Projekt für Ihre App auswählen oder erstellen
  3. Klicken Sie im Menü auf Einstellungen.
  4. Wählen Sie unter Erweiterte Einstellungen die Option Ansprüche bezüglich des Alters von Sitzungen aus, um auth_time zu aktivieren.

Unterstützte Funktionen

In diesem Abschnitt werden die einzelnen Funktionen des Security Bundle beschrieben.

auth_time

Der auth_time-Anspruch ist ein Standardteil des OpenID Connect-Protokolls, der Informationen darüber enthält, wann sich der Endnutzer zuletzt bei Google authentifiziert hat. Dies ist eine JSON-Zahl, die die Anzahl der Sekunden seit der Unix-Epoche (1. Januar 1970, 00:00:00 UTC) darstellt. Sie gibt an, wann sich der Nutzer zuletzt authentifiziert hat. Es handelt sich um einen Zeitstempel, der das letzte Anmeldeereignis des Nutzers in seinem Google-Konto über das aktuelle Gerät oder den 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 auth_time-Anspruch ist für Ihre Anwendung wertvoll, da Sie damit ermitteln können, wie lange es her ist, dass sich ein Nutzer aktiv in einem Google-Konto auf dem von ihm verwendeten Gerät oder Browser angemeldet hat. Dies kann insbesondere aus Sicherheitsgründen wichtig sein, z. B.

  • Sie können dann fundierte Entscheidungen darüber treffen, ob Ihre App vor der Ausführung vertraulicher Nutzeraktionen wie dem Löschen des Kontos, dem Ändern der Kontaktmethoden des Kontos oder dem Ausführen einer Zahlung eine zusätzliche Step-up-Authentifizierung durchführen sollte. Google unterstützt keine Anfragen zur erneuten Authentifizierung von Google-Konten.

  • Die Aktualität und Stabilität der Google-Konto-Sitzung des Nutzers als Vertrauenssignal verwenden. Ein aktueller auth_time-Wert weist in der Regel auf Aktualität hin, während ein älterer Wert auf Stabilität hindeutet.

Bei Web-Apps wird durch die Kombination aus Browser und Betriebssystem des Nutzers eine Sitzung erstellt, nachdem sich der Nutzer in seinem Google-Konto angemeldet hat. Unabhängig davon wird auf Ihrer Website auch eine separate Nutzersitzung aufrechterhalten. 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 mit biometrischen Methoden wie Fingerabdruck- oder Gesichtsscan und gerätespezifischen PIN- oder Muster-Entsperrungen an. Mobile Apps und Plattformen verwenden häufig diese plattformbasierten Authentifizierungsmethoden, anstatt eine neue Sitzung mit Google zu erstellen. Das führt zu seltenen Google-Kontoanmeldungen und entsprechenden Aktualisierungen von auth_time. Ein aktueller auth_time-Wert kann also auf eine Änderung an einer lang laufenden Google-Konto-Sitzung und damit auf ein erhöhtes Risiko hinweisen.

Device-Trust-Signale sind ein komplexes Thema. auth_time wird voraussichtlich zusammen mit anderen Signalen verwendet, 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 auth_time-Anspruchs hängt von der verwendeten API ab. Jede API enthält jedoch einen optionalen Parameter claims zum Anfordern von auth_time.

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 „claims“ 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.

GIS für Web

Die „Mit Google anmelden“-Bibliothek für das Web hat zwei APIs: HTML und JavaScript, um zusätzliche Ansprüche anzufordern. Beispiel: auth_time mit der JavaScript API anfordern:

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

GIS für Android

Eine setClaims-Methode und ein Claim-Objekt werden verwendet, um auth_time anzufordern.

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 „Mit Google anmelden“ authentifizieren.

auth_time-Antwort

Wenn die auth_time-Anforderung in der Anfrage enthalten ist, wird sie in der Antwort der ID-Token-Nutzlast zusammen mit anderen Standardanforderungen wie iss (Aussteller), sub (Subjekt), aud (Zielgruppe) und exp (Ablaufzeit) angezeigt. Der Wert des auth_time-Anspruchs ist eine JSON-Zahl, die die Anzahl der Sekunden darstellt, 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 die Anforderung iat (ausgestellt am), die den Zeitpunkt angibt, zu dem das JWT ausgestellt wurde. Durch den Vergleich der Ansprüche iat und auth_time können Sie die Zeit ermitteln, die seit der letzten Authentifizierung des Nutzers vergangen ist, im Verhältnis dazu, wann das jeweilige ID-Token erstellt wurde. Wenn iat beispielsweise 1748881189 und auth_time 1748875426 ist, beträgt die Differenz 5763 Sekunden, was 1 Stunde, 36 Minuten und 3 Sekunden entspricht.