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 :
- Ouvrez Google Auth Platform.
- Sélectionner ou créer le projet pour votre application
- Cliquez sur Audience dans le menu.
- Vérifiez que l'état de publication est défini sur En production.
- Cliquez sur Centre de validation dans le menu.
Vérifiez que l'état de validation est défini sur Validé.
Pour en savoir plus, consultez le Centre d'aide sur la validation des applications OAuth.
Pour activer la revendication auth_time :
- Ouvrez Google Auth Platform.
- Sélectionner ou créer le projet pour votre application
- Cliquez sur Paramètres dans le menu.
- Sous Paramètres avancés, sélectionnez Revendications sur l'âge de la session pour activer
auth_time.
Fonctionnalités compatibles
Cette section décrit les fonctionnalités individuelles qui composent le pack Sécurité.
auth_time
La revendication auth_time est une partie standard du protocole OpenID Connect qui fournit des informations sur la date à laquelle l'utilisateur final s'est authentifié pour la dernière fois auprès de Google. Il s'agit d'un nombre JSON représentant le nombre de secondes écoulées depuis l'epoch Unix (1er janvier 1970, 00:00:00 UTC). Il correspond à l'heure à laquelle l'utilisateur s'est authentifié pour la dernière fois. Il s'agit d'un code temporel indiquant la dernière 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 de la dernière connexion active d'un utilisateur à 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 question d'authentification renforcée supplémentaire avant d'effectuer des actions utilisateur sensibles, comme la suppression du compte, la modification des méthodes de contact du compte ou un paiement. Google n'accepte pas les demandes de réauthentification de compte Google.
Utilisation de la fraîcheur et de la stabilité de la session de compte Google de l'utilisateur comme signal de confiance. En règle générale, une valeur
auth_timeré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.
De son côté, votre site Web gère également une session utilisateur distincte. Une valeur auth_time plus récente indique que l'utilisateur s'est récemment connecté à son compte Google.
Il s'agit souvent d'un indicateur d'utilisateur actif et engagé, qui 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 la reconnaissance d'empreinte digitale ou faciale, ainsi que des codes ou 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. Par conséquent, les connexions au compte Google et les mises à jour correspondantes de auth_time sont peu fréquentes. Ainsi, 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, comme l'activation de l'authentification multifacteur (MFA), 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 la plate-forme OAuth directement, demandez auth_time en l'ajoutant au paramètre de requête des revendications facultatives. Définissez la valeur du champ id_token de l'objet JSON des 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 méthode setClaims et un objet Claim 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 ajouter les 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.
Réponse auth_time
Lorsque la revendication auth_time est incluse dans la requête, elle apparaît dans la charge utile de la réponse du jeton d'identité, aux côtés 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'identité 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'identité contient également une revendication iat (date/heure d'émission), qui indique l'heure à laquelle le jeton 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'identité spécifique a été créé. Par exemple, si iat est défini sur 1748881189 et auth_time sur 1748875426, la différence est de 5 763 secondes, ce qui représente 1 heure, 36 minutes et 3 secondes de temps écoulé.