Commençons par la définition standard :
Une clé API est une chaîne de caractères utilisée pour identifier et authentifier une application ou un utilisateur qui demande le service d'une API (interface de programmation d'application).
Dans cet article, nous décomposons cette définition pour les personnes curieuses (technologiques ou non) qui veulent connaître l'histoire intérieure de ce qu'est et fait une clé API, et comment cela fonctionne.
Une clé API est le mécanisme de sécurité standard pour toute application qui fournit un service à d'autres applications.
Bien qu'elles ne soient pas la seule méthode (les API peuvent utiliser JWT, dont nous avons parlé ici : API keys vs JWT auth ) , les clés API sont la méthode la plus souvent utilisée pour sécuriser une API.
L' API Google Maps est un exemple de service API ("endpoint") qui nécessite une clé API. Si vous donnez une adresse physique à l'API de Google (par exemple "1001 Main Street, NY, NY"), l'API renverra la latitude et la longitude de l'emplacement le plus probable (40.736124774992504, -73.82508447321075).
Cependant, sans clé API valide, Google ne répondra pas à votre demande. Vous avez besoin d'une autorisation spéciale. La clé API permet à Google de savoir qui vous êtes et si vous avez le droit d'accéder à leur service de carte.
C'est ce qu'on appelle l'authentification (par opposition à l'autorisation, dont nous parlerons plus loin dans l'article.)
D'ailleurs, histoire de comprendre comment fonctionne le mécanisme, quand on écrit "On donne une adresse à l'API de Google" ou "On envoie à Google une clé d'API", on fait référence à l'envoi d'informations à un serveur de Google (faire une requête via des méthodes de requête HTTP telles que Post et Get) et recevoir des informations en retour (obtenir une réponse de la même API).
En somme:
Si un développeur souhaite créer une application cartographique à l'aide de la liste quasi exhaustive d'adresses mondiales de Google, il devra d'abord s'inscrire auprès de Google et obtenir une clé API pour avoir le droit d'utiliser son service API Google Map.
Certaines API ne nécessitent pas de clé API. Par exemple, l' URL Youtube que vous utilisez pour regarder une vidéo est en fait une requête API qui ne nécessite pas de clé API.
Son utilisation est gratuite de n'importe où dans le monde, sur n'importe quel appareil, par tout le monde (pas seulement les développeurs).
Cela dit, les API de Youtube offrent également d'autres services nécessitant une clé API, tels que ceux qui fournissent des informations (privées ou généralement payantes) sur les listes de lecture des chaînes, l'historique des commentaires, les statistiques d'utilisation et des centaines d'autres données appartenant à Youtube.
L'une des principales préoccupations de toute API est sa facilité d'utilisation. Comme nous le répéterons ci-dessous dans le contexte de la sécurité : la facilité d'utilisation est primordiale pour l'utilisation de l'API.
Toutes les entreprises axées sur l'API souhaitent minimiser toutes les frictions lors de l'utilisation de leurs produits API. Cela inclut de rendre l'accès à leurs API facile et sécurisé, ce que les clés API sont conçues pour fournir.
Comme décrit ci-dessus, une clé API permet à un serveur d'identifier tout développeur ou application (le demandeur ou l'utilisateur ) tentant d'accéder à ses services.
Une clé API définit également un ensemble de droits d'accès . Les droits d'accès autorisent le demandeur à effectuer des actions spécifiques et lui interdisent d'entreprendre d'autres actions.
Entrons dans les détails.
Vos clés API sont des identifiants uniques composés d'une combinaison de chiffres et de lettres. Certains contiennent également des caractères non alphanumériques.
L'identifiant unique ne signifie rien en soi ; sa seule signification est son unicité. Cela s'apparente à un mot de passe ou à un code secret.
Les clés API contiennent généralement plus de 64 caractères et sont générées par des systèmes de randomisation qui créent des identifiants universels uniques (souvent appelés GUID ).
Considérez une clé API comme un moyen d'accéder aux données et aux fonctionnalités d'une application via une API.
Chaque demandeur d'API envoie au serveur un identifiant unique, que le serveur utilise pour déterminer ( authentifier ) si la personne ou l'application qui demande le service a le droit de le faire.
Si le serveur ne peut pas authentifier le demandeur d'un appel API (requête), il renvoie une réponse d'échec. C'est l'idée de base derrière la création d'une clé API : si vous utilisez une clé que le serveur ne reconnaît pas, vous ne pourrez pas utiliser le service.
Cependant, si le serveur reconnaît la clé API et authentifie le détenteur de la clé, cet utilisateur a le droit d'utiliser le service.
L'étape suivante consiste pour le serveur à autoriser le demandeur à faire une ou plusieurs choses.
Le processus d'autorisation détermine les droits et la portée d'un demandeur . L'autorisation définit la manière exacte dont un demandeur authentifié peut utiliser une API.
Cela implique de définir vos droits (à quelles fonctionnalités et données vous pouvez accéder) et votre portée (combien de données, combien de temps vous pouvez utiliser l'API, etc.).
Les droits concernent ce que vous pouvez faire. Si la clé API du demandeur contient le droit de rechercher les données, le demandeur peut lire les données pour effectuer la recherche.
Si le demandeur a le droit d' écrire des données, alors le demandeur peut effectuer certaines ou toutes les opérations d' écriture . L'accès en écriture est généralement fourni avec plus de détails. Par exemple, le demandeur peut avoir le droit de mettre à jour un index mais pas de supprimer des enregistrements.
Vous pouvez également combiner les droits. Par exemple, un demandeur peut disposer à la fois de capacités de lecture et d'écriture, ou simplement de lecture seule. Généralement, les demandeurs disposent de plusieurs API pour effectuer différentes actions. Par exemple:
Lecture seule pour les recherches.
Accès en lecture et écriture pour la navigation ainsi que l'indexation (ajouts, mises à jour, suppressions).
Accès administrateur , qui comprend tout, y compris la création d'autres API.
Chaque système d'API possède une clé d'API globale qui permet non seulement les opérations de lecture et d'écriture, mais également un accès complet à tout ce qu'une API peut faire d'autre.
Par exemple, une API d'administration permet aux applications et aux utilisateurs d'effectuer des méta-actions telles que l'ajout, la suppression ou la modification d'utilisateurs, d'identifiants, de droits et d'étendues.
Compte tenu de la puissance d'une clé d'API d'administration, vous souhaiterez que cette clé d'API soit complètement sécurisée, c'est-à-dire cachée et verrouillée du public.
Il en va de même pour toute clé API de niveau écriture. Les clés en lecture seule peuvent être plus flexibles selon le cas d'utilisation. La lecture de données sensibles pour l'entreprise nécessite évidemment une sécurité plus élevée que la recherche de produits et de films sur un site Web.
Une fois qu'un demandeur a le droit de faire quelque chose, une API peut restreindre ou étendre les capacités du demandeur dans le cadre de ce droit. Par exemple, si un demandeur a le droit général de mettre à jour les index, la clé API peut limiter l'accès du demandeur à certains index uniquement.
Ou, la clé API peut étendre l'accès en lecture seule qui permet à un demandeur d'accéder uniquement à un petit nombre d'enregistrements.
Vous pouvez utiliser la portée pour plus de sécurité en filtrant certaines adresses IP. Vous pouvez également définir un temps de validité, peut-être une demande par jour, ou sur un petit nombre quotidien de demandes sur une période de 30 jours.
Enfin, une clé API peut fournir des limitations basées sur des filtres. Par exemple, une clé API peut permettre à un utilisateur de mettre à jour uniquement les articles « vêtements » ou « alimentation ». Ou il peut restreindre un demandeur en lecture seule pour effectuer des recherches ou des filtres prédéfinis.
Un bon exemple du dernier point sur l'utilisation restrictive de l'API est l'endroit où vous accordez un accès en lecture seule, mais le restreignez avec un filtre qui omet les données sensibles. Cela ajoute une sécurité supplémentaire, permettant au demandeur de voir les données conçues uniquement pour l'affichage public.
Mais la sécurité nécessite plus de discussion.
En termes de sécurité, une clé API ne va pas plus loin. Essentiellement, si une clé est volée ou divulguée, il n'y a plus de sécurité.
Il existe de nombreuses façons d'obtenir une clé API. Les pirates peuvent intercepter la demande, voler la clé, puis transformer la demande en quelque chose de bien plus dommageable.
Ou, comme c'est le plus souvent le cas, un développeur peut accidentellement révéler la clé API en l'envoyant sur Internet pour que quiconque puisse la trouver facilement. Ou le pousser accidentellement vers un référentiel Git. Ou écrivez-le sur une serviette et laissez-le sur la table du restaurant.
Certaines mesures de sécurité reposent sur des contrôles de sécurité supplémentaires. Certaines de ces méthodes nécessitent que le demandeur effectue un travail supplémentaire, ce qui nuit à la popularité d'une API. Il convient de garder à l'esprit l'API 101 :
La facilité d'utilisation est primordiale pour l'utilisation de l'API, vous souhaitez donc minimiser toutes les frictions.
Voici quelques mesures de sécurité qui ne nécessitent aucune surcharge ou charge supplémentaire pour l'utilisateur de l'API :
Créer des limites de taux, qui contrôlent le nombre de fois que l'API peut être appelée.
Créer d'autres limites ou restrictions d'application pour minimiser les attaques.
Utilisation de méthodes de détection d'attaques pour signaler un comportement inattendu, des référents ou un comportement d'attaque connu.
Rejeter les demandes qui sont hors norme ou qui portent atteinte à la vie privée ou aux données.
Et comme mentionné ci-dessus, supprimer l'accès aux données non sensibles.
Créez manuellement ou automatisez régulièrement la génération de nouvelles clés API.
Note technique : Beaucoup de ces protections peuvent être ajoutées dans l'en-tête en tant que paramètres dans la requête API.
Voici les techniques de sécurité d'API les plus populaires qui obligent les développeurs à faire plus que simplement fournir une clé API :
Utilisation d'un type spécial de clé API appelée clé API sécurisée.
Connexion et utilisation des identifiants et mots de passe utilisateur.
Utiliser des jetons d'authentification (par exemple, des jetons JWT) pour l'authentification et l'autorisation.
Cryptage. Pour que cela fonctionne, l'utilisateur doit disposer du même logiciel de chiffrement que celui du serveur API. Le logiciel de chiffrement convertit la clé API en données illisibles, que seul le serveur API peut comprendre.
Une clé API sécurisée contient des mesures de sécurité supplémentaires par rapport à la clé API standard : (a) elle est éphémère (créée à la volée et temporaire) ; en tant que tel, il ne peut pas être vu sur un tableau de bord pour être modifié ou géré de quelque manière que ce soit.
Plus important encore, (b) il contient l'identifiant de l'utilisateur - ainsi, un seul utilisateur peut utiliser la clé.
Normalement, les clés API sont générées une seule fois , pour n'importe quel utilisateur, et restent les mêmes à vie. Cependant, il y a deux inconvénients avec les clés permanentes :
Une fois que quelqu'un a volé la clé, il pourra l'utiliser jusqu'à ce que le vol soit découvert et que la clé soit retirée.
Si vous avez besoin de 10 000 utilisateurs pour avoir des clés uniques, vous devrez les créer et les gérer toutes. Et bien que vous puissiez automatiser la génération de nouvelles clés API, vous devrez presque toujours modifier manuellement le code.
La plupart des applications de niveau production ont besoin de quelque chose de plus sécurisé et plus facile à gérer, sans aucun travail supplémentaire.
Comment ça marche : Une clé API sécurisée exploite la session et/ou l'identifiant de l'utilisateur en incluant ces informations dans le cadre de la génération de clé. Essentiellement, la clé est générée à la volée en combinant l'identifiant de l'utilisateur avec la portée de la clé (par exemple, les limites de temporisation, les filtres de sécurité).
Une fois la clé générée, le demandeur doit toujours envoyer la clé d'API générée ainsi que son ID utilisateur et sa portée. Le serveur d'API générera ensuite à nouveau la clé à l'aide de l'ID utilisateur et de la portée, puis la comparera à la clé envoyée par l'utilisateur. S'ils diffèrent, alors c'est évidemment un hack.
Cette logique de double contrôle n'est qu'un pas vers une meilleure sécurité. L'étape suivante consiste à demander à l'utilisateur de l'API de se connecter.
La dernière méthode de sécurité que nous mentionnerons ici consiste à demander à l'utilisateur de l'API de se connecter.
Dans ce scénario, si la connexion réussit, le serveur d'API émet un jeton unique et illisible que l'utilisateur de l'API doit utiliser tant qu'il reste connecté. De plus, le jeton inclut les informations d'identification de l'utilisateur, ce qui rend difficile pour quiconque autre que l'utilisateur de envoyer le jeton.
Ainsi, nous améliorons la méthode de clé API sécurisée temporaire de deux manières importantes :
JWT nécessite une connexion.
JWT génère un jeton dont la valeur contient une version chiffrée des informations d'identification de connexion de l'utilisateur. Ces informations d'identification de l'utilisateur permettent au serveur d'API d'authentifier l'utilisateur à chaque demande d'API successive.
En savoir plus sur le jeton JWT et ses différences avec une clé API.
Nous avons discuté des objectifs de la clé API, de son apparence, de son fonctionnement et de ce qui peut et ne peut pas être fait avec une clé API.
Nous sommes également entrés dans les détails concernant la sécurité. Nous terminerons sur un autre aspect : celui du suivi de l'utilisation de l'API et de l'amélioration de l'API.
Une API s'appuie sur l'expérience utilisateur pour améliorer sa conception et ses fonctionnalités. Une entreprise qui souhaite offrir la meilleure API sur le marché concurrentiel croissant des API doit savoir comment ses clients utilisent leurs API.
En enregistrant chaque demande - quelles demandes, le nombre de demandes, le succès et les échecs de chaque demande, le fournisseur d'API ajoute des rapports, un débogage et une analyse à la conception et à la mise en œuvre de l'API.