Rumah >hujung hadapan web >tutorial js >Panduan Pemula untuk Pengesahan API: Dari Asas kepada Pelaksanaan

Panduan Pemula untuk Pengesahan API: Dari Asas kepada Pelaksanaan

Patricia Arquette
Patricia Arquetteasal
2024-09-22 14:45:02720semak imbas

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 authentification et 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 des 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.

Apl ini menunjukkan kepentingan pengesahan API dan cara ia boleh dilaksanakan menggunakan Axios untuk mengendalikan permintaan dalam persekitaran Node.js.


Cabaran yang Saya Hadapi

Semasa mengerjakan projek ini, saya menghadapi masalah dengan menghantar permintaan melalui Axios, terutamanya dengan pengesahan asas. Selepas beberapa penggalian, saya menjumpai siaran StackOverflow yang membantu yang menghilangkan kekeliruan saya. Jika anda menghadapi masalah yang sama, pastikan anda menyemaknya!


Kesimpulan

Memahami pengesahan API adalah penting untuk melindungi API anda daripada penyalahgunaan dan mengehadkan akses tanpa kebenaran. Dengan melaksanakan pengesahan asas, kunci API dan kebenaran berasaskan token, anda boleh melindungi API anda dan memastikan ia digunakan secara bertanggungjawab.

Pengambilan Utama:

  • Pengesahan Asas adalah mudah tetapi tidak begitu selamat.
  • Keizinan Kunci API membenarkan penjejakan permintaan tetapi boleh dikongsi dengan mudah.
  • Pengesahan Berasaskan Token ialah yang paling selamat dan sering digunakan dalam sistem OAuth.

Saya harap siaran ini membantu anda memahami pelbagai jenis pengesahan API! Jangan ragu untuk meninggalkan sebarang soalan atau maklum balas dalam ulasan di bawah. Selamat mengekod! ?

Atas ialah kandungan terperinci Panduan Pemula untuk Pengesahan API: Dari Asas kepada Pelaksanaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn