Sécuriser une API en exigeant des clés API

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

Points abordés

Dans ce tutoriel, vous allez apprendre à effectuer les opérations suivantes:

  • Créer un proxy d'API qui nécessite une clé API
  • Ajoutez un produit d'API.
  • Ajouter un développeur et enregistrer une application
  • Appeler votre API avec une clé API

Il est important de protéger votre API contre tout accès non autorisé. Pour ce faire, vous pouvez utiliser des clés API (également appelées clés publiques, clés client ou clés d'application).

Lorsqu'une application envoie une requête à votre API, elle doit fournir une clé valide. Au moment de l'exécution, la stratégie "Verify API Key" (Vérifier la clé API) vérifie que la clé API fournie:

  • est valide ;
  • n'a pas été révoquée ;
  • Correspond à la clé API du produit d'API qui expose les ressources demandées

Si la clé est valide, la requête est autorisée. Si la clé n'est pas valide, la requête entraîne un échec d'autorisation.

Dans ce tutoriel, vous allez créer un proxy d'API qui nécessite une clé API valide pour y accéder.

Ce dont vous avez besoin

  • Un compte Apigee Edge. Si vous n'en avez pas encore, vous pouvez vous inscrire en suivant les instructions de la section Créer un compte Apigee Edge.
  • Un navigateur Web pour effectuer un appel d'API.
  • (Pour la section sur les crédits supplémentaires, cela n'est pas obligatoire) cURL installé sur votre ordinateur pour effectuer des appels d'API à partir de la ligne de commande.

Créer le proxy d'API

À propos de "mocktarget"

Le service mocktarget est hébergé sur Apigee et renvoie des données simples. Il ne nécessite aucune clé d'API ni jeton d'accès. Vous pouvez même y accéder depuis un navigateur Web. Essayez-le en cliquant sur les éléments suivants :

http://mocktarget.apigee.net

La cible renvoie Hello, Guest!. Utilisez la ressource /help pour obtenir une page d'aide sur les autres ressources d'API disponibles.

  1. Accédez à https://apigee.com/edge et connectez-vous.
  2. Basculez vers l'organisation de votre choix en cliquant sur votre nom d'utilisateur en haut de la barre de navigation latérale pour afficher le menu du profil utilisateur, puis en sélectionnant l'organisation dans la liste.

    sélection de l'organisation dans le menu du profil utilisateur
  3. Cliquez sur API Proxies (Proxys d'API) sur la page de destination pour afficher la liste des proxys d'API.

    Menu des API Edge
  4. Cliquez sur + Proxy.
    Bouton "Créer un proxy"
  5. Sur la page Créer un proxy, sélectionnez Proxy inverse (le plus courant).
  6. Sur la page Proxy Details (Détails du proxy), configurez le proxy comme suit:
    Dans ce champ procédez comme suit
    Nom du proxy Saisissez : helloworld_apikey
    Chemin de base du projet

    Remplacez par : /helloapikey

    Le chemin d'accès de base du projet fait partie de l'URL utilisée pour envoyer des requêtes au proxy d'API.

    Remarque: Pour obtenir les recommandations d'Apigee sur la gestion des versions d'API, consultez la section Gestion des versions de l'e-book Web API Design: The Missing Link.

    Existing API (API existante)

    Saisissez : http://mocktarget.apigee.net

    Ce champ définit l'URL cible qu'Apigee Edge appelle lors d'une requête adressée au proxy d'API.

    Description Saisissez : hello world protected by API key
  7. Cliquez sur Suivant.
  8. Sur la page Règles communes, pour Sécurité : Autorisation, sélectionnez Clé API, puis cliquez sur Suivant. Deux règles seront ajoutées à votre proxy d'API.
  9. Sur la page Virtual Hosts (Hôtes virtuels), sélectionnez default (par défaut) et secure (sécurisé), puis cliquez sur Next (Suivant). Sélectionner par défaut vous permet d'appeler votre API avec http://. Sélectionnez sécurisé pour pouvoir appeler votre API avec https://.
  10. Sur la page Résumé, assurez-vous que l'environnement de déploiement de test est sélectionné, puis cliquez sur Créer et déployer.
  11. Vous verrez un message confirmant que votre nouveau proxy d'API et votre produit d'API ont bien été créés, et que le proxy d'API a été déployé dans votre environnement de test.
  12. Cliquez sur Modifier le proxy pour afficher la page Présentation du proxy d'API.

Afficher les règles

  1. Dans l'éditeur de proxy d'API, cliquez sur l'onglet Développer. Vous constaterez que deux règles ont été ajoutées au flux de requêtes du proxy d'API :
    • Verify API Key (Vérifier la clé API) : vérifie l'appel d'API pour s'assurer qu'une clé API valide est présente (envoyée en tant que paramètre de requête).
    • Remove Query Param apikey (Suppression de la clé API du paramètre de requête) : règle "AssignMessage" qui supprime la clé API une fois qu'elle a été vérifiée, afin qu'elle ne soit pas transmise ni exposée inutilement.
  2. Cliquez sur l'icône de stratégie "Verify API Key" (Vérifier la règle de clé API) dans la vue de flux, puis examinez la configuration XML de la règle dans la vue Code inférieure. L'élément <APIKey> indique à la stratégie où la clé API doit être recherchée lors de l'appel. Par défaut, il recherche la clé en tant que paramètre de requête appelé apikey dans la requête HTTP:

    <APIKey ref="request.queryparam.apikey" />
    

    Le nom apikey est arbitraire et peut correspondre à n'importe quelle propriété contenant la clé API.

Essayer d'appeler l'API

Au cours de cette étape, vous allez effectuer un appel d'API réussi directement vers le service cible, puis appeler le proxy d'API en échec pour voir comment il est protégé par les règles.

  1. Opération réussie

    Dans un navigateur Web, accédez à l'adresse suivante. Il s'agit du service cible auquel le proxy d'API est configuré pour transmettre la requête, mais vous l'atteindrez directement pour le moment:

    http://mocktarget.apigee.net
    

    Vous devriez obtenir cette réponse indiquant que l'opération a réussi : Hello, Guest!

  2. Échec

    Essayez maintenant d'appeler votre proxy d'API :

    http://ORG_NAME-test.apigee.net/helloapikey
    

    en remplaçant ORG_NAME par le nom de votre organisation Edge.

    Sans la stratégie "Valider la clé API", cet appel vous donnerait la même réponse que l'appel précédent. Toutefois, dans ce cas, vous devriez obtenir la réponse d'erreur suivante:

    {"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}
    

    ce qui signifie que vous n'avez pas transmis de clé API valide (en tant que paramètre de requête).

Au cours des prochaines étapes, vous ajouterez un produit API.

Ajouter un produit d'API

Pour ajouter un produit API à l'aide de l'interface utilisateur Apigee, procédez comme suit :

  1. Sélectionnez Publier > Produits API.
  2. Cliquez sur Ajouter un produit API.
  3. Saisissez les informations détaillées sur le produit pour votre produit API.

    Champ Description
    Nom Nom interne du produit d'API. N'utilisez pas de caractères spéciaux dans le nom.
    Remarque:Une fois le produit API créé, vous ne pouvez plus modifier son nom. Exemple : helloworld_apikey-Product.
    Nom à afficher Nom à afficher du produit d'API. Le nom à afficher est utilisé dans l'interface utilisateur et vous pouvez le modifier à tout moment. Si aucune valeur n'est spécifiée, la valeur "Name" sera utilisée. Ce champ est renseigné automatiquement à l'aide de la valeur "Nom". Vous pouvez modifier ou supprimer son contenu. Le nom à afficher peut inclure des caractères spéciaux. Exemple : helloworld_apikey-Product.
    Description Description du produit API. Par exemple, Test product for tutorial.
    Environnement Environnements auxquels le produit d'API autorise l'accès. Par exemple, test ou prod.
    Accès Sélectionnez Publique.
    Approuver automatiquement les requêtes d'accès Activez l'approbation automatique des demandes de clés pour ce produit d'API depuis n'importe quelle application.
    Quotas Ignorez ce champ dans ce tutoriel.
    Champs d'application OAuth autorisés Ignorez ce champ dans ce tutoriel.
  4. Dans la section "Ressources d'API", sélectionnez le proxy d'API que vous venez de créer. Par exemple, helloworld_apikey.
  5. Cliquez sur Add (Ajouter).
  6. Dans la section Chemins d'accès, ajoutez le chemin d'accès "/".
  7. Cliquez sur Add (Ajouter).
  8. Cliquez sur Enregistrer.

Au cours des étapes suivantes, vous obtiendrez la clé API requise.

Ajouter un développeur et une application à votre organisation

Nous allons maintenant simuler le workflow d'un développeur qui s'inscrit pour utiliser vos API. Un développeur dispose d'une ou plusieurs applications qui appellent vos API, et chaque application obtient une clé API unique. En tant que fournisseur d'API, vous disposez ainsi d'un contrôle plus précis sur l'accès à vos API et de rapports plus détaillés sur le trafic des API par application.

Créer un développeur

Pour créer un développeur, procédez comme suit :

  1. Sélectionnez Publier > Développeurs dans le menu.
  2. Cliquez sur + Développeur.
  3. Saisissez les informations suivantes dans la fenêtre "New Developer" (Nouveau développeur) :

    Dans ce champ saisir
    First Name (Prénom) Keyser
    Nom Soze
    Nom d'utilisateur keyser
    Adresse e-mail keyser@example.com
  4. Cliquez sur Créer.

Enregistrer une application

Pour enregistrer une application de développeur, procédez comme suit :

  1. Sélectionnez Publier > Applications.
  2. Cliquez sur + App (+ Application).
  3. Saisissez ce qui suit dans la fenêtre New App (Nouvelle application) :

    p
    Dans ce champ procédez comme suit
    Nom et Nom à afficher Saisissez : keyser_app
    Entreprise/Développeur Sélectionnez Developer.
    Développeur Sélectionnez Keyser Soze (keyser@example.com).
    URL de rappel et Remarques Laissez le champ vide
  4. Dans la section Credentials (Identifiants), sélectionnez Never (Jamais) dans le menu Expiry (Expiration). Les identifiants de cette application n'expirent jamais.
  5. Sous Produits, cliquez sur Ajouter un produit.
  6. Sélectionnez helloworld_apikey-Product.
  7. Cliquez sur Add (Ajouter).
  8. Cliquez sur Create (Créer) au-dessus et à droite de la section App Details (Détails de l'application) pour enregistrer votre travail.

Obtenir la clé API

Pour obtenir la clé API, procédez comme suit :

  1. Sur la page Applications (Publier > Applications), cliquez sur keyser_app.
  2. Sur la page keyser_app, cliquez sur Afficher à côté de Clé dans la section Identifiants. Dans la section Product (Produit), notez que la clé est associée à bonjour_apikey.

  3. Sélectionnez et copiez la clé. Vous l'utiliserez à l'étape suivante.

Appeler l'API avec une clé

Maintenant que vous disposez d'une clé API, vous pouvez l'utiliser pour appeler le proxy d'API. Saisissez la commande suivante dans votre navigateur Web. Remplacez ORG_NAME par le nom de votre organisation Edge et API_KEY par la clé API ci-dessous. Assurez-vous que le paramètre de requête ne contient pas d'espaces superflus.

http://ORG_NAME-test.apigee.net/helloapikey?apikey=API_KEY

Lorsque vous appelez le proxy d'API, vous devriez obtenir la réponse suivante : Hello, Guest!

Félicitations ! Vous avez créé un proxy d'API et vous l'avez protégé en exigeant qu'une clé API valide soit incluse dans l'appel.

Notez qu'il n'est généralement pas recommandé de transmettre une clé API en tant que paramètre de requête. Envisagez plutôt de le transmettre dans l'en-tête HTTP.

Bonne pratique: transmettre la clé dans l'en-tête HTTP

Au cours de cette étape, vous allez modifier le proxy pour rechercher la clé API dans un en-tête appelé x-apikey.

  1. Modifiez le proxy d'API. Sélectionnez Develop > API Proxies > bonjour_apikey, puis accédez à la vue Develop.
  2. Sélectionnez la règle Verify API Key (Vérifier la clé API), puis modifiez le fichier XML de la règle pour indiquer à la règle de rechercher dans header plutôt que dans queryparam:

    <APIKey ref="request.header.x-apikey"/>
    
  3. Enregistrez le proxy d'API pour déployer la modification.
  4. Effectuez l'appel d'API suivant à l'aide de cURL pour transmettre la clé API en tant qu'en-tête appelé x-apikey. N'oubliez pas de remplacer le nom de votre organisation.

    curl -v -H "x-apikey: API_KEY" http://ORG_NAME-test.apigee.net/helloapikey
    

Notez que pour mener à bien la modification, vous devez également configurer la règle "AssignMessage" afin de supprimer l'en-tête au lieu du paramètre de requête. Exemple :

<Remove>
<Headers>
    <Header name="x-apikey"/>
</Headers>
</Remove>

Articles associés

Voici quelques articles directement liés à ce tutoriel :

Pour aller plus loin, protéger les API avec des clés API n'est qu'une partie de l'équation. Souvent, la protection des API implique des mécanismes de sécurité supplémentaires tels que OAuth.

OAuth est un protocole ouvert qui, en bref, échange des identifiants (comme le nom d'utilisateur et le mot de passe) contre des jetons d'accès. Les jetons d'accès sont des chaînes longues et aléatoires qui peuvent être transmises autour d'un pipeline de messages, même d'une application à l'autre, sans compromettre les identifiants d'origine. Les jetons d'accès ont souvent une durée de vie courte, et de nouveaux jetons sont donc générés en permanence.