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 :
Commençons !
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.
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.
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); } });
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.
Une distinction clé à retenir :
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); } });
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.
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); } });
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.
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!
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:
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!