Pack de sécurité

Ce guide décrit un ensemble de fonctionnalités qui renvoient des signaux de confiance supplémentaires concernant un compte Google. Ces signaux de confiance aident votre système de gestion de compte à prendre des décisions basées sur les risques lors de la connexion, de la création de compte et plus tard pour les utilisateurs connus.

Configuration

Pour recevoir des revendications supplémentaires, votre application doit être publiée, validée, et les fonctionnalités du bundle de sécurité doivent être activées.

Pour vérifier que votre application est publiée et validée :

  1. Ouvrez Google Auth Platform.
  2. Sélectionnez ou créez le projet pour votre application.
  3. Dans le menu, cliquez sur Audience.
  4. Vérifiez que l'état de publication est En production.
  5. Dans le menu, cliquez sur Centre de validation.
  6. Vérifiez que l'état de la validation est Validé.

    Pour en savoir plus, consultez le Centre d'aide sur la validation des applications OAuth.

Pour activer la revendication auth_time :

  1. Ouvrez Google Auth Platform.
  2. Sélectionnez ou créez le projet pour votre application.
  3. Dans le menu, cliquez sur Paramètres.
  4. Sous Paramètres avancés , sélectionnez Revendications d'âge de la session pour activer auth_time.

Fonctionnalités compatibles

Cette section décrit les fonctionnalités individuelles qui composent le bundle de sécurité.

auth_time

La revendication auth_time est un élément standard du protocole OpenID Connect qui fournit des informations sur la dernière authentification de l'utilisateur final auprès de Google. Il s'agit d'un nombre JSON représentant le nombre de secondes écoulées depuis l'époque Unix (1er janvier 1970, 00:00:00 UTC). Il correspond à l'heure de la dernière authentification de l'utilisateur. Considérez-le comme un horodatage indiquant le dernier événement de connexion de l'utilisateur à son compte Google depuis l'appareil ou le navigateur actuel. Cette revendication est incluse dans le jeton d'identification, qui est un jeton Web JSON (JWT) contenant des informations validées sur l'authentification et l'utilisateur.

La revendication auth_time est utile pour votre application, car elle vous permet de déterminer la date à laquelle un utilisateur s'est connecté activement à un compte Google sur l'appareil ou le navigateur qu'il utilise. Cela peut être particulièrement important pour des raisons de sécurité, par exemple :

  • Prendre une décision éclairée quant à savoir si votre application doit émettre une demande d'authentification supplémentaire avant d'effectuer des actions utilisateur sensibles, telles que la suppression du compte, la modification des méthodes de contact du compte ou le paiement. Google n'accepte pas les demandes de réauthentification de compte Google.

  • Utiliser la fraîcheur et la stabilité de la session de compte Google de l'utilisateur comme signal de confiance. En règle générale, une valeur auth_time récente indique la fraîcheur, tandis qu'une valeur plus ancienne indique la stabilité.

Pour les applications Web, la combinaison du navigateur et du système d'exploitation de l'utilisateur constitue une session une fois que l'utilisateur s'est connecté à son compte Google. Indépendamment, votre site Web gère également une session utilisateur distincte. Une valeur auth_time plus récente indique que l'utilisateur s'est connecté récemment à son compte Google. Il s'agit souvent d'un indicateur d'utilisateur actif et engagé, et peut être interprété comme un signal de risque plus faible.

Sur les plates-formes mobiles telles qu'Android, les utilisateurs se connectent généralement directement à leur appareil à l'aide de méthodes biométriques telles que l'empreinte digitale ou la reconnaissance faciale, ainsi que des codes ou des schémas de déverrouillage spécifiques à l'appareil. Les applications et plates-formes mobiles utilisent souvent ces méthodes d'authentification basées sur la plate-forme plutôt que de créer une session avec Google, ce qui entraîne des connexions peu fréquentes au compte Google et des mises à jour correspondantes de auth_time. Par conséquent, une valeur auth_time récente peut signaler une modification d'une session de compte Google de longue durée et donc un risque accru.

Les signaux de confiance sont un sujet nuancé. auth_time doit être utilisé avec d'autres signaux, par exemple si l'authentification multifacteur (MFA) est activée, la méthode d'authentification utilisée et la durée de la session utilisateur entre votre application et votre plate-forme.

Requête auth_time

La méthode spécifique utilisée pour demander la revendication auth_time diffère selon l'API utilisée. Toutefois, chaque API inclut un paramètre claims facultatif pour demander auth_time.

Protocole OIDC

Lorsque vous utilisez directement la plate-forme OAuth, demandez auth_time en l'ajoutant au paramètre de requête de revendications facultatif. Définissez la valeur du champ id_token de l'objet JSON de revendications sur {"auth_time":{"essential":true}}. Exemple :

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

Pour en savoir plus, consultez OpenID Connect.

GIS pour le Web

La bibliothèque Se connecter avec Google pour le Web comporte deux API (HTML et JavaScript) permettant de demander des revendications supplémentaires. Par exemple, demandez auth_time à l'aide de l'API JavaScript :

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

Pour en savoir plus, consultez Se connecter avec Google pour le Web.

GIS pour Android

Une setClaims méthode et un Claim objet sont utilisés pour demander auth_time.

Mettez à jour vos dépendances de compilation pour utiliser les dernières versions des bibliothèques androidx.credentials:credentials-play-services-auth et com.google.android.libraries.identity.googleid:googleid.

Instanciez un objet Claim de type auth_time, en utilisant setClaims pour l'ajouter aux options de connexion :

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

Pour en savoir plus, consultez Authentifier les utilisateurs avec Se connecter avec Google.

iOS

Le SDK Se connecter avec Google pour iOS ajoute un objet authTimeClaim et un paramètre claims à la classe GIDSignIn qui est utilisée pour demander auth_time de manière facultative.

auth_time

Les applications qui utilisent ASWebAuthenticationSession mettent à jour un conteneur de cookies partagé à l'échelle de l'appareil. GIDSignIn utilise cette méthode par défaut dans iOS 12 ou version ultérieure et macOS 12.16 ou version ultérieure. Dans ce scénario, un utilisateur qui se connecte à son compte Google est authentifié et la session est stockée dans le conteneur de cookies partagé. Ici, auth_time correspond à la dernière authentification Google de l'utilisateur sur l'appareil, et pas seulement dans votre application.

SFSafariViewController, WKWebView et UIWebView fonctionnent dans des bacs à sable isolés au sein de votre application. Évitez de les utiliser lorsque vous utilisez auth_time. Ici, auth_time correspond à la dernière connexion de l'utilisateur à l'application elle-même. Comme la valeur est toujours récente, elle est moins significative.

Pour demander auth_time, mettez à jour les dépendances GoogleSignIn vers la dernière version et créez un objet authTimeClaim, en l'ajoutant à l'ensemble claims.

Swift

Ajoutez l'ensemble de revendications à la méthode 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

Ajoutez l'ensemble de revendications à la méthode 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. }];

Pour en savoir plus, consultez Intégrer Google Sign-In à votre application iOS ou macOS.

Réponse auth_time

Lorsque la revendication auth_time est incluse dans la requête, elle apparaît dans la réponse de charge utile du jeton d'identification, avec d'autres revendications standards telles que iss (émetteur), sub (sujet), aud (audience) et exp (délai d'expiration). La valeur de la revendication auth_time est un nombre JSON représentant le nombre de secondes écoulées depuis l'époque Unix (1er janvier 1970, 00:00:00 UTC) jusqu'à la dernière authentification de l'utilisateur. Voici un exemple de jeton d'identification décodé qui inclut la revendication 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"
}

Le jeton d'identification contient également une revendication iat (émis à), qui indique l'heure à laquelle le JWT a été émis. En comparant les revendications iat et auth_time, vous pouvez déterminer le temps écoulé depuis la dernière authentification de l'utilisateur par rapport au moment où le jeton d'identification spécifique a été créé. Par exemple, si iat est 1748881189 et auth_time est 1748875426, la différence est de 5 763 secondes, ce qui représente 1 heure, 36 minutes et 3 secondes de temps écoulé.