Les API Google utilisent le protocole OAuth 2.0 pour l'authentification et l'autorisation. Google est compatible avec les scénarios OAuth 2.0 courants, tels que ceux des serveurs Web, des applications installées côté client, et des appareils avec entrée limitée.
Pour commencer, obtenez les identifiants du client OAuth 2.0 sur Google API Console. Ensuite, votre application cliente demande un jeton d'accès au serveur d'autorisation Google, en extrait un jeton dans la réponse et l'envoie à l'API Google à laquelle vous souhaitez accéder. Pour une démonstration interactive de l'utilisation d'OAuth 2.0 avec Google (y compris la possibilité d'utiliser vos propres identifiants client), testez OAuth 2.0 Playground.
Cette page présente les scénarios d'autorisation OAuth 2.0 compatibles avec Google et fournit des liens vers des contenus plus détaillés. Pour en savoir plus sur l'utilisation de OAuth 2.0 pour l'authentification, consultez OpenID Connect.
Procédure générale
Toutes les applications suivent un schéma de base lorsqu'elles accèdent à une API Google à l'aide du protocole OAuth 2.0. De manière générale, il faut suivre cinq étapes:
1. Obtenez les identifiants OAuth 2.0 via Google API Console.
Accédez au Google API Console pour obtenir les identifiants OAuth 2.0, tels qu'un ID client et un code secret client, connus de Google et de votre application. L'ensemble de valeurs dépend du type d'application que vous créez. Par exemple, une application JavaScript ne nécessite pas de secret, contrairement à une application de serveur Web.
Vous devez créer un client OAuth adapté à la plate-forme sur laquelle votre application sera exécutée, par exemple:
- Pour les applications Web côté serveur ou JavaScript, utilisez le type de client "web". N'utilisez pas ce type de client pour d'autres applications, telles que les applications natives ou mobiles.
- Pour les applications Android, utilisez le type de client "Android".
- Pour les applications iOS et macOS, utilisez le type de client "iOS".
- Pour les applications de la plate-forme Windows universelle, utilisez le type de client "Universal Windows Platform".
- Pour les périphériques en entrée limitée, tels que les téléviseurs ou les appareils intégrés, utilisez le type de client "Téléviseurs et périphériques à entrée limitée".
- Pour les interactions de serveur à serveur, utilisez des comptes de service.
2. Obtenez un jeton d'accès auprès du serveur d'autorisation Google.
Pour que votre application puisse accéder à des données privées à l'aide d'une API Google, elle doit obtenir un jeton d'accès qui accorde l'accès à cette API. Un même jeton d'accès peut accorder différents degrés d'accès à plusieurs API. Un paramètre de variable appelé scope
contrôle l'ensemble des ressources et des opérations autorisées par un jeton d'accès. Lors de la requête de jeton d'accès, votre application envoie une ou plusieurs valeurs dans le paramètre scope
.
Il existe plusieurs façons d'envoyer cette requête, qui varient en fonction du type d'application que vous créez. Par exemple, une application JavaScript peut demander un jeton d'accès à l'aide d'une redirection de navigateur vers Google, tandis qu'une application installée sur un appareil sans navigateur utilise des requêtes de service Web.
Certaines requêtes nécessitent une étape d'authentification lors de laquelle l'utilisateur se connecte avec son compte Google. Une fois connecté, il est invité à indiquer s'il est disposé à accorder une ou plusieurs autorisations demandées par votre application. Ce processus est appelé consentement de l'utilisateur.
Si l'utilisateur accorde au moins une autorisation, le serveur d'autorisation Google envoie à votre application un jeton d'accès (ou un code d'autorisation que votre application peut utiliser pour obtenir un jeton d'accès) et une liste des niveaux d'accès accordés par ce jeton. Si l'utilisateur n'accorde pas l'autorisation, le serveur renvoie une erreur.
En règle générale, il est recommandé de demander des champs d'application de manière incrémentielle, lorsque l'accès est requis, plutôt que de payer à l'avance. Par exemple, une application qui souhaite enregistrer un événement dans un agenda ne doit pas demander l'accès à Google Agenda tant que l'utilisateur n'appuie pas sur le bouton "Ajouter à Agenda" (voir Autorisation incrémentielle).
3. Examinez les niveaux d'accès accordés par l'utilisateur.
Comparez les champs d'application inclus dans la réponse du jeton d'accès avec les niveaux d'accès requis pour accéder aux fonctionnalités de votre application qui dépendent de l'accès à une API Google associée. Désactivez toutes les fonctionnalités de votre application qui ne peuvent pas fonctionner sans accès à l'API associée.
Le champ d'application inclus dans votre requête peut ne pas correspondre à celui inclus dans votre réponse, même si l'utilisateur a accordé tous les champs d'application demandés. Consultez la documentation de chaque API Google pour connaître les niveaux d'accès requis. Une API peut mapper plusieurs valeurs de chaîne de champ d'application sur un seul champ d'application, en renvoyant la même chaîne de champ d'application pour toutes les valeurs autorisées dans la requête.
Exemple: l'API Google People peut renvoyer le champ d'application https://www.googleapis.com/auth/contacts
lorsqu'une application a demandé à un utilisateur d'autoriser le champ d'application https://www.google.com/m8/feeds/
. La méthode people.updateContact
de l'API Google People requiert un niveau d'accès accordé https://www.googleapis.com/auth/contacts
.
4. Envoyer le jeton d'accès à une API.
Une fois qu'une application a obtenu un jeton d'accès, elle est envoyée à une API Google dans un en-tête de requête d'autorisation HTTP. Il est possible d'envoyer des jetons en tant que paramètres de chaîne de requête d'URI, mais nous vous le déconseillons, car les paramètres d'URI peuvent se retrouver dans des fichiers journaux non sécurisés. Nous vous recommandons également de ne pas créer de noms de paramètres URI inutiles.
Les jetons d'accès ne sont valides que pour l'ensemble des opérations et des ressources décrit dans l'élément scope
de la requête de jeton. Par exemple, si un jeton d'accès est émis pour l'API Google Calendar, il ne donne pas accès à l'API Google Contacts. Toutefois, vous pouvez envoyer ce jeton d'accès à l'API Google Calendar plusieurs fois pour effectuer des opérations similaires.
5. Si nécessaire, actualisez le jeton d'accès.
Les jetons d'accès ont une durée de vie limitée. Si votre application a besoin d'accéder à une API Google au-delà de la durée de vie d'un seul jeton d'accès, elle peut obtenir un jeton d'actualisation. Un jeton d'actualisation permet à votre application d'obtenir de nouveaux jetons d'accès.
Scénarios
Applications de serveur Web
Le point de terminaison Google OAuth 2.0 est compatible avec les applications de serveur Web qui utilisent des langages et des frameworks tels que PHP, Java, Python, Ruby et ASP.NET.
La séquence d'autorisation commence lorsque votre application redirige un navigateur vers une URL Google. L'URL inclut des paramètres de requête qui indiquent le type d'accès demandé. Google gère l'authentification des utilisateurs, la sélection des sessions et le consentement des utilisateurs. Le résultat est un code d'autorisation que l'application peut échanger contre un jeton d'accès et un jeton d'actualisation.
L'application doit stocker le jeton d'actualisation pour une utilisation ultérieure et utiliser le jeton d'accès pour accéder à une API Google. Une fois le jeton d'accès expiré, l'application l'utilise pour en obtenir un nouveau.

Pour en savoir plus, consultez Utiliser OAuth 2.0 pour les applications de serveur Web.
Applications installées
Le point de terminaison Google OAuth 2.0 est compatible avec les applications installées sur des appareils tels que les ordinateurs, les appareils mobiles et les tablettes. Lorsque vous créez un ID client via le Google API Console, indiquez qu'il s'agit d'une application installée, puis sélectionnez le type d'application Android, Chrome, iOS, Universal Windows Platform (UWP) ou de bureau.
Le processus génère un ID client et, dans certains cas, un code secret du client, que vous intégrez au code source de votre application. (Dans ce contexte, le code secret du client n'est évidemment pas traité comme un secret.)
La séquence d'autorisation commence lorsque votre application redirige un navigateur vers une URL Google. L'URL inclut des paramètres de requête qui indiquent le type d'accès demandé. Google gère l'authentification des utilisateurs, la sélection des sessions et le consentement des utilisateurs. Le résultat est un code d'autorisation que l'application peut échanger contre un jeton d'accès et un jeton d'actualisation.
L'application doit stocker le jeton d'actualisation pour une utilisation ultérieure et utiliser le jeton d'accès pour accéder à une API Google. Une fois le jeton d'accès expiré, l'application l'utilise pour en obtenir un nouveau.

Pour en savoir plus, consultez Utiliser OAuth 2.0 pour les applications installées.
Applications côté client (JavaScript)
Le point de terminaison Google OAuth 2.0 est compatible avec les applications JavaScript exécutées dans un navigateur.
La séquence d'autorisation commence lorsque votre application redirige un navigateur vers une URL Google. L'URL inclut des paramètres de requête qui indiquent le type d'accès demandé. Google gère l'authentification des utilisateurs, la sélection des sessions et le consentement des utilisateurs.
Vous obtenez un jeton d'accès que le client doit valider avant de l'inclure dans une requête API Google. Lorsque le jeton expire, l'application répète le processus.

Pour en savoir plus, consultez Utiliser OAuth 2.0 pour les applications côté client.
Applications sur des périphériques à saisie limitée
Le point de terminaison Google OAuth 2.0 est compatible avec les applications qui s'exécutent sur des périphériques d'entrée limités, tels que les consoles de jeu, les caméras vidéo et les imprimantes.
La séquence d'autorisation commence par l'envoi par l'application d'une requête de service Web à une URL Google pour obtenir un code d'autorisation. La réponse contient plusieurs paramètres, dont une URL et un code que l'application présente à l'utilisateur.
L'utilisateur obtient l'URL et le code de l'appareil, puis passe à un appareil ou à un ordinateur distinct disposant de fonctionnalités de saisie plus complètes. L'utilisateur lance un navigateur, accède à l'URL spécifiée, se connecte et saisit le code.
Pendant ce temps, l'application interroge une URL Google à un intervalle spécifié. Une fois que l'utilisateur a approuvé l'accès, la réponse du serveur Google contient un jeton d'accès et un jeton d'actualisation. L'application doit stocker le jeton d'actualisation pour une utilisation ultérieure et utiliser le jeton d'accès pour accéder à une API Google. Une fois le jeton d'accès expiré, l'application l'utilise pour en obtenir un nouveau.

Pour en savoir plus, consultez Utiliser OAuth 2.0 pour les appareils.
Comptes de service
Les API Google, telles que l'API Prediction et Google Cloud Storage, peuvent agir au nom de votre application sans accéder aux informations sur les utilisateurs. Dans ces situations, votre application doit prouver sa propre identité à l'API, mais le consentement de l'utilisateur n'est pas nécessaire. De même, dans les entreprises, votre application peut demander un accès délégué à certaines ressources.
Pour ces types d'interactions de serveur à serveur, vous avez besoin d'un compte de service, qui appartient à votre application et non à un utilisateur final individuel. Votre application appelle les API Google au nom du compte de service. Le consentement de l'utilisateur n'est pas requis. Dans les scénarios qui ne sont pas liés à un compte de service, votre application appelle les API Google au nom des utilisateurs finaux, et le consentement de l'utilisateur est parfois requis.
Les identifiants d'un compte de service, que vous obtenez à partir de Google API Console, incluent une adresse e-mail générée unique, un ID client et au moins une paire de clés publique/privée. L'ID client et une clé privée vous permettent de créer un jeton JWT signé et de créer une requête de jeton d'accès au format approprié. Votre application envoie ensuite la requête de jeton au serveur d'autorisation Google OAuth 2.0, qui renvoie un jeton d'accès. L'application utilise le jeton pour accéder à une API Google. Lorsque le jeton expire, l'application répète le processus.

Pour en savoir plus, consultez la documentation sur les comptes de service.
Taille du jeton
La taille des jetons peut varier dans les limites suivantes:
- Codes d'autorisation: 256 octets
- Jetons d'accès: 2 048 octets
- Jetons d'actualisation: 512 octets
La valeur des jetons d'accès renvoyés par l' API Security Token Service de Google Cloud est semblable à celle des jetons d'accès OAuth 2.0 de l'API Google, mais leur taille est différente. Pour en savoir plus, consultez la documentation de l'API.
Google se réserve le droit de modifier la taille des jetons dans ces limites, et votre application doit accepter les tailles de jeton variables en conséquence.
Expiration du jeton d'actualisation
Vous devez écrire votre code pour anticiper la possibilité qu'un jeton d'actualisation donné ne fonctionne plus. Un jeton d'actualisation peut cesser de fonctionner pour l'une des raisons suivantes:
- L'utilisateur a révoqué l'accès à votre application.
- Le jeton d'actualisation n'a pas été utilisé depuis six mois.
- L'utilisateur a modifié les mots de passe, et le jeton d'actualisation contient les champs d'application Gmail.
- Le compte utilisateur a dépassé le nombre maximal de jetons d'actualisation autorisés.
- Si un administrateur
définit l'un des services demandés dans les champs d'application de votre application sur "Limité" (l'erreur est
admin_policy_enforced
). - Pour les API Google Cloud Platform, il se peut que la durée de session définie par l'administrateur ait été dépassée.
Un projet Google Cloud Platform avec un écran d'autorisation OAuth configuré pour un type d'utilisateur externe et dont l'état de publication est "Test" obtient un jeton d'actualisation qui expire dans sept jours, sauf si les seuls champs d'application OAuth demandés sont un sous-ensemble de nom, d'adresse e-mail et de profil utilisateur (via les champs d'application
userinfo.email, userinfo.profile, openid
ou leurs équivalents OpenID Connect).
Le nombre de jetons d'actualisation est actuellement limité à 100 par compte Google et par ID client OAuth 2.0. Si la limite est atteinte, la création d'un nouveau jeton d'actualisation invalide automatiquement le jeton d'actualisation le plus ancien sans avertissement. Cette limite ne s'applique pas aux comptes de service.
Le nombre total de jetons d'actualisation d'un compte utilisateur ou d'un compte de service sur l'ensemble des clients est également plus élevé. La plupart des utilisateurs normaux ne dépasseront pas cette limite, mais le compte de développeur utilisé pour tester une implémentation pourrait l'être.
Si vous devez autoriser plusieurs programmes, machines ou appareils, vous pouvez contourner le nombre de clients que vous autorisez par compte Google à 15 ou 20. Si vous êtes administrateur Google Workspace, vous pouvez créer des utilisateurs supplémentaires disposant de droits d'administrateur, puis les utiliser pour autoriser certains clients.
Gérer les règles de contrôle de session pour les organisations Google Cloud Platform (GCP)
Les administrateurs de organisations GCP peuvent exiger une réauthentification fréquente des utilisateurs lorsqu'ils accèdent aux ressources GCP, à l'aide de la fonctionnalité de contrôle de session Google Cloud. Cette règle affecte l'accès à Google Cloud Console, au SDK Google Cloud (également appelé gcloud CLI), ainsi qu'à toute application OAuth tierce nécessitant le champ d'application Cloud Platform. Si un utilisateur a mis en place une stratégie de contrôle de session, à la fin de la durée de la session, vos appels d'API renverront une erreur semblable à ce qui se passerait si le jeton d'actualisation était révoqué. L'appel échoue avec le type d'erreur invalid_grant
. Le champ error_subtype
permet de distinguer un jeton révoqué de son échec en raison d'une règle de contrôle de session (par exemple, "error_subtype": "invalid_rapt"
). Les durées de session peuvent être très limitées (de 1 à 1 heure), mais le redémarrage peut être très long.
De même, vous ne devez pas utiliser ni encourager l'utilisation d'identifiants utilisateur pour le déploiement de serveur à serveur. Si des identifiants utilisateur sont déployés sur un serveur pour des tâches ou des opérations de longue durée, et qu'un client applique des stratégies de contrôle de session à ces utilisateurs, l'application de serveur échouera, car il sera impossible d'authentifier à nouveau l'utilisateur une fois la durée de session expirée.
Pour savoir comment aider vos clients à déployer cette fonctionnalité, consultez cet article d'aide destiné aux administrateurs.
Bibliothèques clientes
Les bibliothèques clientes suivantes s'intègrent aux frameworks populaires, ce qui facilite l'implémentation d'OAuth 2.0. D'autres fonctionnalités seront ajoutées aux bibliothèques au fil du temps.
- Bibliothèque cliente des API Google pour Java
- Bibliothèque cliente des API Google pour Python
- Bibliothèque cliente des API Google pour Go
- Bibliothèque cliente des API Google pour .NET
- Bibliothèque cliente des API Google pour Ruby
- Bibliothèque cliente des API Google pour PHP
- Bibliothèque cliente des API Google pour JavaScript
- GTMAppAuth – Bibliothèque cliente OAuth pour Mac et iOS