OAuth 2.0: authentifier les utilisateurs auprès de Google

OAuth2 est le protocole d'autorisation standard dans l'industrie. Il fournit un mécanisme aux utilisateurs pour autoriser les applications Web et de bureau à accéder à des informations privées sans partager leur nom d'utilisateur, un mot de passe et d’autres identifiants privés.

Ce didacticiel permet de créer une extension qui accède aux contacts Google d'un utilisateur à l'aide de l'application Google People API et API Chrome Identity. Comme les extensions ne se chargent pas HTTPS, impossible d'effectuer ou définissent des cookies, ils s'appuient sur l'API Chrome Identity pour utiliser OAuth2.

Commencer

Commencez par créer un répertoire et les fichiers de démarrage suivants.

manifest.json

Ajoutez le fichier manifeste en créant un fichier nommé manifest.json et en incluant le code suivant.

{
  "name": "OAuth Tutorial FriendBlock",
  "version": "1.0",
  "description": "Uses OAuth to connect to Google's People API and display contacts photos.",
  "manifest_version": 3,
  "action": {
    "default_title": "FriendBlock, friends face's in a block."
  },
  "background": {
    "service_worker": "service-worker.js"
  }
}

service-worker.js

Ajoutez le service worker de l'extension en créant un fichier nommé service-worker.js et en incluant le code suivant.

chrome.action.onClicked.addListener(function() {
  chrome.tabs.create({url: 'index.html'});
});

index.html

Ajoutez un fichier HTML appelé index.html et incluez le code suivant.

<html>
  <head>
    <title>FriendBlock</title>
    <style>
      button {
        padding: 10px;
        background-color: #3C79F8;
        display: inline-block;
      }
    </style>
  </head>
  <body>
    <button>FriendBlock Contacts</button>
    <div id="friendDiv"></div>
  </body>
</html>

Conservez un ID d'extension cohérent

Il est essentiel de conserver un identifiant unique pendant le développement. Pour conserver le même identifiant, procédez comme suit:

Importer l'extension dans le tableau de bord du développeur

Empaquetez le répertoire de l'extension dans un fichier .zip et importez-le dans l'application Chrome Developer tableau de bord sans le publier:

  1. Dans le tableau de bord du développeur, cliquez sur Ajouter un nouvel élément.
  2. Cliquez sur Parcourir les fichiers, sélectionnez le fichier ZIP de l'extension, puis importez-le.
  3. Accédez à l'onglet Package, puis cliquez sur View public key (Afficher la clé publique).

Onglet &quot;Package&quot; du tableau de bord du développeur

Une fois le pop-up ouvert, procédez comme suit:

  1. Copiez le code entre -----BEGIN PUBLIC KEY----- et -----END PUBLIC KEY-----.
  2. Supprimez les sauts de ligne pour en faire une seule ligne de texte.

Pop-up de clé publique

Ajoutez le code à manifest.json sous le champ "key". De cette façon, l'extension utilisera le même ID.

{ // manifest.json
  "manifest_version": 3,
...
  "key": "ThisKeyIsGoingToBeVeryLong/go8GGC2u3UD9WI3MkmBgyiDPP2OreImEQhPvwpliioUMJmERZK3zPAx72z8MDvGp7Fx7ZlzuZpL4yyp4zXBI+MUhFGoqEh32oYnm4qkS4JpjWva5Ktn4YpAWxd4pSCVs8I4MZms20+yx5OlnlmWQEwQiiIwPPwG1e1jRw0Ak5duPpE3uysVGZXkGhC5FyOFM+oVXwc1kMqrrKnQiMJ3lgh59LjkX4z1cDNX3MomyUMJ+I+DaWC2VdHggB74BNANSd+zkPQeNKg3o7FetlDJya1bk8ofdNBARxHFMBtMXu/ONfCT3Q2kCY9gZDRktmNRiHG/1cXhkIcN1RWrbsCkwIDAQAB",
}

Comparer les ID

Ouvrez la page de gestion des extensions à l'adresse chrome://extensions et vérifiez que le mode développeur est activé. et importez le répertoire d'extension décompressé. Comparez l'ID d'extension sur la page de gestion des extensions à l'ID de l'article dans le tableau de bord du développeur. Ils doivent concorder.

Identifiant du
correspondance d&#39;extension

Créer un ID client OAuth

Accédez à la console Google APIs et créez un projet. Lorsque vous êtes prêt, sélectionnez Identifiants dans la barre latérale, cliquez sur Créer des identifiants, puis sélectionnez ID client OAuth.

Créer des identifiants pour l&#39;extension

Sur la page "Créer un ID client", sélectionnez Extension Chrome. Indiquez le nom de l'extension et le lieu l'ID d'extension à la fin de l'URL dans le champ "ID de l'application".

Fournir les informations sur l&#39;extension

Pour terminer, cliquez sur "Créer". La console fournit un ID client OAuth.

Enregistrer OAuth dans le fichier manifeste

Incluez le champ "oauth2" dans le fichier manifeste de l'extension. Placez l'ID client OAuth généré sous "client_id" Incluez une chaîne vide dans "scopes" pour le moment.

{
  "name": "OAuth Tutorial FriendBlock",
  ...
  "oauth2": {
    "client_id": "yourExtensionOAuthClientIDWillGoHere.apps.googleusercontent.com",
    "scopes":[""]
  },
  ...
}

Lancer le premier flux OAuth

Enregistrez l'autorisation identity dans le fichier manifeste.

{
  "name": "OAuth Tutorial FriendBlock",
  ...
  "permissions": [
    "identity"
  ],
  ...
}

Créez un fichier nommé oauth.js pour gérer le flux OAuth et incluez le code suivant.

window.onload = function() {
  document.querySelector('button').addEventListener('click', function() {
    chrome.identity.getAuthToken({interactive: true}, function(token) {
      console.log(token);
    });
  });
};

Placez un tag de script pour oauth.js dans l'en-tête de index.html.

...
  <head>
    <title>FriendBlock</title>
    ...
    <script type="text/javascript" src="oauth.js"></script>
  </head>
...

Actualisez l'extension et cliquez sur l'icône du navigateur pour ouvrir index.html. Ouvrez la console et cliquez sur "FriendBlock Contacts" . Un jeton OAuth s'affiche dans la console.

Afficher le jeton dans la console

Activer l'API Google People

Revenez à la console Google APIs et sélectionnez Bibliothèque dans la barre latérale. Recherchez "Google People" API", cliquez sur le résultat qui convient et activez-le.

Activer l&#39;API People

Ajoutez la bibliothèque cliente de l'API Google People à "scopes" dans le fichier manifeste de l'extension.

{
  "name": "OAuth Tutorial FriendBlock",
  ...
  "oauth2": {
    "client_id": "yourExtensionOAuthClientIDWillGoHere.apps.googleusercontent.com",
    "scopes": [
      "https://www.googleapis.com/auth/contacts.readonly"
    ]
  },
  ...
}

Revenez à la console Google APIs et aux identifiants. Cliquez sur "Créer des identifiants" et sélectionnez "Clé API" dans le menu déroulant.

Créer des identifiants pour l&#39;API People

Conservez la clé API générée pour une utilisation ultérieure.

Créer la première requête API

Maintenant que l'extension dispose des autorisations et des identifiants appropriés, et qu'elle peut autoriser un utilisateur Google, elle peut demander des données via l'API People. Mettez à jour le code dans oauth.js pour qu'il corresponde à ce qui suit.

window.onload = function() {
  document.querySelector('button').addEventListener('click', function() {
    chrome.identity.getAuthToken({interactive: true}, function(token) {
      let init = {
        method: 'GET',
        async: true,
        headers: {
          Authorization: 'Bearer ' + token,
          'Content-Type': 'application/json'
        },
        'contentType': 'json'
      };
      fetch(
          'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY',
          init)
          .then((response) => response.json())
          .then(function(data) {
            console.log(data)
          });
    });
  });
};

Remplacez API_KEY par la clé API générée à partir de la console Google APIs. L'extension doit enregistrer un objet JSON qui inclut un tableau de people/account_ids sous le memberResourceNames.

Bloquer des visages

Maintenant que l'extension renvoie la liste des contacts de l'utilisateur, elle peut effectuer des requêtes supplémentaires. pour récupérer les profils et les informations de ces contacts . L'extension utilise la méthode memberResourceNames pour récupérer les informations sur les photos des contacts des utilisateurs. Remplacer oauth.js par incluez le code suivant.

window.onload = function() {
  document.querySelector('button').addEventListener('click', function() {
    chrome.identity.getAuthToken({interactive: true}, function(token) {
      let init = {
        method: 'GET',
        async: true,
        headers: {
          Authorization: 'Bearer ' + token,
          'Content-Type': 'application/json'
        },
        'contentType': 'json'
      };
      fetch(
          'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=<API_Key_Here>',
          init)
          .then((response) => response.json())
          .then(function(data) {
            let photoDiv = document.querySelector('#friendDiv');
            let returnedContacts = data.memberResourceNames;
            for (let i = 0; i < returnedContacts.length; i++) {
              fetch(
                  'https://people.googleapis.com/v1/' + returnedContacts[i] +
                      '?personFields=photos&key=API_KEY',
                  init)
                  .then((response) => response.json())
                  .then(function(data) {
                    let profileImg = document.createElement('img');
                    profileImg.src = data.photos[0].url;
                    photoDiv.appendChild(profileImg);
                  });
            };
          });
    });
  });
};

Actualisez la page et revenez à l'extension. Cliquez sur le bouton FriendBlock et ta-da ! Découvrez les visages des contacts dans un bloc.

Visages de contact dans un bloc