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

Vous consultez la documentation Apigee Edge.
Accédez à la documentation Apigee X.

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. Lors de l'exécution, la règle VerifyAPIKey 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 elle n'est pas valide, la requête entraîne un échec d'autorisation.

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

Prérequis

  • 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 "Crédit supplémentaire", non requise) cURL installé sur votre machine 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. En fait, vous pouvez y accéder dans 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 d'autres ressources d'API disponibles.

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

    sélection de l'organisation dans le menu du profil utilisateur
  3. Cliquez sur 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 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 de base du projet fait partie de l'URL utilisée pour envoyer des requêtes au proxy d'API.

    Remarque : Pour les recommandations d'Apigee concernant 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 default vous permet d'appeler votre API avec http://. Si vous sélectionnez secure (sécurisé), vous pouvez appeler votre API avec https://.
  10. Sur la page Résumé, assurez-vous que l'environnement de déploiement test est sélectionné, puis cliquez sur Créer et déployer.
  11. Un message vous indique que votre nouveau proxy d'API et un produit d'API ont été créés avec succès, et que le proxy d'API a été déployé dans votre environnement de test.
  12. Cliquez sur Edit proxy (Modifier le proxy) pour afficher la page Overview (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 verrez que deux règles ont été ajoutées au flux de requêtes du proxy d'API :
    • 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).
    • Supprimer le paramètre de requête apikey : règle AssignMessage qui supprime la clé API une fois la vérification terminée, afin qu'elle ne soit pas transmise et exposée inutilement.
  2. Cliquez sur l'icône de la règle VerifyAPIKey dans la vue de flux, puis examinez la configuration XML de la règle dans la vue de code inférieure. L'élément <APIKey> indique à la règle où elle doit rechercher la clé API lors de l'appel. Par défaut, elle recherche la clé sous la forme d'un paramètre de requête appelé apikey dans la requête HTTP :

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

    Le nom apikey est arbitraire et peut être 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 directement au service cible qui réussit, puis un appel infructueux au proxy d'API 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. Le proxy d'API est configuré pour transférer la requête à ce service cible, mais vous allez l'appeler 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 règle VerifyAPIKey, cet appel fournirait la même réponse que l'appel précédent. Toutefois, dans ce cas, vous devriez obtenir le message d'erreur suivant :

    {"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 étapes suivantes, vous allez ajouter un produit d'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 détails du produit API.

    Champ Description
    Nom Nom interne du produit d'API. Ne spécifiez pas de caractères spéciaux dans le nom.
    Remarque : Vous ne pouvez pas modifier le nom une fois le produit d'API créé. Par exemple, helloworld_apikey-Product.
    Nom à afficher Nom à afficher du produit d'API. Le nom à afficher est utilisé dans l'UI et peut être modifié à tout moment. S'il n'est pas spécifié, la valeur du champ "Nom" est utilisée. Ce champ est renseigné automatiquement à l'aide de la valeur du champ "Name". Vous pouvez modifier ou supprimer son contenu. Le nom à afficher peut contenir des caractères spéciaux. Par 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 Public.
    Approuver automatiquement les requêtes d'accès Activez l'approbation automatique des requêtes de clé pour ce produit d'API depuis n'importe quelle application.
    Quota Ignorez ce champ dans ce tutoriel.
    Champs d'application OAuth autorisés Ignorez ce champ dans ce tutoriel.
  4. Dans la section "API resources" (Ressources d'API), sélectionnez le proxy d'API que vous venez de créer. Par exemple : helloworld_apikey.
  5. Cliquez sur Ajouter.
  6. Dans la section Chemins d'accès, ajoutez le chemin "/".
  7. Cliquez sur 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 ensuite simuler le workflow d'un développeur qui s'inscrit pour utiliser vos API. Un développeur possède une ou plusieurs applications qui appellent vos API, et chaque application obtient une clé API unique. En tant que fournisseur d'API, vous bénéficiez d'un contrôle plus précis de 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 entrée
    Prénom Keyser
    Nom Soze
    Nom d'utilisateur keyser
    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 les informations suivantes dans la fenêtre 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 Identifiants, sélectionnez Jamais dans le menu 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 Ajouter.
  8. Cliquez sur Créer au-dessus et à droite de la section 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 Produit, notez que la clé est associée à helloworld_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 le nom de votre organisation Edge par ORG_NAME et la clé API par API_KEY ci-dessous. Assurez-vous que le paramètre de requête ne comporte aucun espace supplémentaire.

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

Désormais, lorsque vous appelez le proxy d'API, vous obtenez la réponse suivante : Hello, Guest!

Félicitations ! Vous avez créé un proxy d'API et 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. Vous devriez plutôt envisager de la 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 nommé x-apikey.

  1. Modifiez le proxy d'API. Sélectionnez Développer > Proxys d'API > helloworld_apikey, puis accédez à la vue Développer.
  2. Sélectionnez la règle Verify API Key, puis modifiez son code XML pour lui indiquer de rechercher la clé API 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 en utilisant cURL pour transmettre la clé API en tant qu'en-tête nommé 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 finaliser la modification, vous devez également configurer la règle AssignMessage pour supprimer l'en-tête et non le 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 une sécurité supplémentaire telle qu'OAuth.

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