Maison  >  Article  >  interface Web  >  Guide du débutant sur l'authentification API : des bases à la mise en œuvre

Guide du débutant sur l'authentification API : des bases à la mise en œuvre

Patricia Arquette
Patricia Arquetteoriginal
2024-09-22 14:45:02683parcourir

A Beginner

Au cours des derniers jours, j'ai découvert l'authentification API . Après avoir expérimenté plusieurs méthodes et créé un petit projet, j’ai pensé que ce serait une bonne idée de partager mes apprentissages. Dans cet article, nous aborderons :

  • Pourquoi l'authentification API est importante.
  • Les différents types d'authentification API (de base, par clé API et basée sur un jeton).
  • Comment implémenter ces méthodes d'authentification dans une application Web simple à l'aide de Axios.

Commençons !


Pourquoi l'authentification API est-elle importante ?

Dans la plupart des cas, nous ne souhaitons pas que notre API privée soit ouverte à n’importe qui. L'authentification permet de garantir que seuls les utilisateurs ou clients autorisés peuvent accéder à notre API. De plus, l'authentification permet de limiter le nombre de demandes, de suivre les utilisateurs et de protéger les données sensibles.

Mais qu’en est-il des API qui ne nécessitent pas d’authentification ? Vous pouvez toujours les sécuriser dans une certaine mesure en utilisant la limitation de débit, qui limite le nombre de requêtes qu'un utilisateur ou une IP peut effectuer dans un certain laps de temps. Ceci est utile lorsque vous diffusez des données statiques ou que vous n’avez pas besoin d’une protection renforcée.

Plongeons-nous maintenant dans les trois principaux types d'authentification API : Authentification de base, Autorisation par clé API et Authentification basée sur des jetons.


1. Authentification de base

L'authentification de base consiste à envoyer un nom d'utilisateur et un mot de passe encodés en Base64 à chaque requête API. Bien que simple à mettre en œuvre, ce n’est pas très sécurisé puisque les informations d’identification sont transmises à chaque demande.

Comment j'ai implémenté l'authentification de base

J'ai utilisé l'API Secrets pour cet exemple. Tout d'abord, j'ai enregistré un utilisateur en envoyant une requête POST avec les données suivantes :

{
  "username": "arka",
  "password": "221855"
}

Après m'être inscrit avec succès, je me suis connecté en utilisant Postman pour envoyer le nom d'utilisateur et le mot de passe dans les en-têtes de la demande :

GET https://secrets-api.appbrewery.com/all?page=1

Cela renvoie une liste de secrets stockés par l'utilisateur.

Voici comment j'ai implémenté l'authentification de base dans mon application Node.js à l'aide de Axios :

// Basic authentication route
app.get("/basicAuth", async (req, res) => {
  try {
    const result = await axios.get(API_URL + "/all?page=2", {
      auth: {
        username: myUsername,
        password: myPassword,
      },
    });
    res.render("index.ejs", { content: JSON.stringify(result.data) });
  } catch (error) {
    res.status(404).send(error.message);
  }
});

2. Autorisation de clé API

L'autorisation de clé API permet d'accéder à une API en transmettant une clé (générée pour l'utilisateur) à chaque requête. Cette clé est utilisée pour suivre le client qui fait la demande et peut souvent être liée à la limitation du débit ou à la facturation.

Différence entre l'authentification et l'autorisation

Une distinction clé à retenir :

  • Authentification : vérification de l'identité de l'utilisateur (par exemple, connexion avec les informations d'identification).
  • Autorisation : permettre à l'utilisateur ou au client d'accéder à une ressource (par exemple, en utilisant une clé API pour faire des requêtes).

Avec l'autorisation de clé API, vous obtenez généralement une clé API comme celle-ci :

GET https://secrets-api.appbrewery.com/generate-api-key

Après avoir reçu la clé API, vous pouvez l'utiliser pour effectuer des demandes autorisées :

GET https://secrets-api.appbrewery.com/filter?score=5&apiKey=generated-api-key

Voici comment j'ai implémenté l'autorisation de clé API dans mon application :

// API key route
app.get("/apiKey", async (req, res) => {
  try {
    const result = await axios.get(API_URL + "/filter", {
      params: {
        score: 5,
        apiKey: myAPIKey,
      },
    });
    res.render("index.ejs", { content: JSON.stringify(result.data) });
  } catch (error) {
    res.status(404).send(error.message);
  }
});

3. Authentification basée sur des jetons (OAuth)

L'authentification basée sur les jetons est plus sécurisée que les autres méthodes. L'utilisateur se connecte à l'aide de ses informations d'identification et le fournisseur d'API génère un jeton. Ce jeton est utilisé pour les demandes ultérieures au lieu de transmettre le nom d'utilisateur et le mot de passe à chaque fois.

Cette méthode est couramment utilisée dans OAuth et le jeton est souvent valide pour une durée limitée. Ceci est particulièrement utile lorsque des applications tierces doivent interagir avec les données d'un utilisateur, comme l'utilisation de Google Agenda à partir d'une autre application.

Comment j'ai implémenté l'authentification basée sur les jetons

Tout d'abord, je me suis inscrit et j'ai obtenu le token :

POST https://secrets-api.appbrewery.com/get-auth-token
{
  "username": "jackbauer",
  "password": "IAmTheBest"
}

Une fois le token reçu, je l'ai utilisé pour de futures demandes :

GET https://secrets-api.appbrewery.com/secrets/1

Voici comment j'ai implémenté l'authentification basée sur des jetons dans mon application à l'aide de Bearer Tokens :

// Bearer token route
const config = {
  headers: { Authorization: `Bearer ${myBearerToken}` },
};

app.get("/bearerToken", async (req, res) => {
  try {
    const result = await axios.get(API_URL + "/secrets/2", config);
    res.render("index.ejs", { content: JSON.stringify(result.data) });
  } catch (error) {
    res.status(404).send(error.message);
  }
});

Rassembler tout cela

Pour conclure mes apprentissages, j'ai créé une petite application Web qui implémente les quatre types de requêtes API (pas d'authentification, authentification de base, clé API et basée sur des jetons). L'application comporte quatre boutons, chacun déclenchant un type de demande différent.

Voici un aperçu de la façon dont j'ai configuré les itinéraires et les boutons dans l'application :

// No authentication route
app.get("/noAuth", async (req, res) => {
  try {
    const result = await axios.get(API_URL + "/random");
    res.render("index.ejs", { content: JSON.stringify(result.data) });
  } catch (error) {
    res.status(404).send(error.message);
  }
});

Vous pouvez trouver le code complet de l'application ici : GitHub Repo.

This app demonstrates the importance of API authentication and how it can be implemented using Axios for handling requests in a Node.js environment.


Challenges I Faced

While working on this project, I encountered issues with sending requests via Axios, especially with basic authentication. After some digging, I found a helpful StackOverflow post that cleared up my confusion. If you run into similar issues, be sure to check it out!


Conclusion

Understanding API authentication is essential for protecting your API from misuse and limiting unauthorized access. By implementing basic authentication, API keys, and token-based authorization, you can safeguard your API and ensure it’s used responsibly.

Key Takeaways:

  • Basic Authentication is simple but not very secure.
  • API Key Authorization allows tracking of requests but can be shared easily.
  • Token-Based Authentication is the most secure and often used in OAuth systems.

I hope this post helped you understand the different types of API authentication! Feel free to drop any questions or feedback in the comments below. Happy coding! ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn