Heim > Web-Frontend > js-Tutorial > Ein Anfängerleitfaden zur API-Authentifizierung: Von den Grundlagen bis zur Implementierung

Ein Anfängerleitfaden zur API-Authentifizierung: Von den Grundlagen bis zur Implementierung

Patricia Arquette
Freigeben: 2024-09-22 14:45:02
Original
701 Leute haben es durchsucht

A Beginner

In den letzten Tagen habe ich etwas über API-Authentifizierung gelernt. Nachdem ich mit verschiedenen Methoden experimentiert und ein kleines Projekt erstellt hatte, dachte ich, es wäre eine tolle Idee, meine Erkenntnisse zu teilen. In diesem Beitrag behandeln wir Folgendes:

  • Warum API-Authentifizierung wichtig ist.
  • Die verschiedenen Arten der API-Authentifizierung (Basis, API-Schlüssel und Token-basiert).
  • So implementieren Sie diese Authentifizierungsmethoden in einer einfachen Web-App mit Axios.

Lasst uns anfangen!


Warum ist die API-Authentifizierung wichtig?

In den meisten Fällen möchten wir nicht, dass unsere private API für jedermann offen steht. Durch die Authentifizierung wird sichergestellt, dass nur autorisierte Benutzer oder Clients auf unsere API zugreifen können. Darüber hinaus hilft die Authentifizierung dabei, die Anzahl der Anfragen zu begrenzen, den Überblick über Benutzer zu behalten und sensible Daten zu schützen.

Aber was ist mit APIs, die keine Authentifizierung erfordern? Sie können sie dennoch bis zu einem gewissen Grad absichern, indem Sie die Ratenbegrenzung verwenden, die die Anzahl der Anfragen begrenzt, die ein Benutzer oder eine IP innerhalb eines bestimmten Zeitrahmens stellen kann. Dies ist nützlich, wenn Sie statische Daten bereitstellen oder keinen starken Schutz benötigen.

Lassen Sie uns nun in die drei Haupttypen der API-Authentifizierung eintauchen: Basisauthentifizierung, API-Schlüsselautorisierung und Tokenbasierte Authentifizierung.


1. Basisauthentifizierung

Die Basisauthentifizierung umfasst das Senden eines Benutzernamens und eines Passworts, codiert in Base64, bei jeder API-Anfrage. Obwohl es einfach zu implementieren ist, ist es nicht sehr sicher, da die Anmeldeinformationen bei jeder Anfrage weitergegeben werden.

Wie ich die Standardauthentifizierung implementiert habe

Ich habe für dieses Beispiel die Secrets API verwendet. Zuerst habe ich einen Benutzer registriert, indem ich eine POST-Anfrage mit den folgenden Daten gesendet habe:

{
  "username": "arka",
  "password": "221855"
}
Nach dem Login kopieren

Nach erfolgreicher Registrierung habe ich mich mit Postman angemeldet, um den Benutzernamen und das Passwort in den Anforderungsheadern zu senden:

GET https://secrets-api.appbrewery.com/all?page=1
Nach dem Login kopieren

Dies gibt eine Liste der vom Benutzer gespeicherten Geheimnisse zurück.

So habe ich mit Axios die Basisauthentifizierung in meiner Node.js-App implementiert:

// 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);
  }
});
Nach dem Login kopieren

2. API-Schlüsselautorisierung

Die API-Schlüsselautorisierung ermöglicht den Zugriff auf eine API durch Übergabe eines (für den Benutzer generierten) Schlüssels bei jeder Anfrage. Dieser Schlüssel wird verwendet, um den Client zu verfolgen, der die Anfrage stellt, und kann häufig mit der Ratenbegrenzung oder Abrechnung verknüpft werden.

Unterschied zwischen Authentifizierung und Autorisierung

Ein wichtiger Unterschied, den Sie sich merken sollten:

  • Authentifizierung: Überprüfung der Identität des Benutzers (z. B. Anmeldung mit Anmeldeinformationen).
  • Autorisierung: Dem Benutzer oder Client erlauben, auf eine Ressource zuzugreifen (z. B. mithilfe eines API-Schlüssels, um Anfragen zu stellen).

Mit der API-Schlüsselautorisierung erhalten Sie normalerweise einen API-Schlüssel wie diesen:

GET https://secrets-api.appbrewery.com/generate-api-key
Nach dem Login kopieren

Nach Erhalt des API-Schlüssels können Sie damit autorisierte Anfragen stellen:

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

So habe ich die API-Schlüsselautorisierung in meiner App implementiert:

// 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);
  }
});
Nach dem Login kopieren

3. Tokenbasierte Authentifizierung (OAuth)

Tokenbasierte Authentifizierung ist sicherer als die anderen Methoden. Der Benutzer meldet sich mit seinen Anmeldeinformationen an und der API-Anbieter generiert ein Token. Dieses Token wird für nachfolgende Anfragen verwendet, anstatt jedes Mal den Benutzernamen und das Passwort weiterzugeben.

Diese Methode wird häufig in OAuth verwendet und das Token ist oft nur für eine begrenzte Zeit gültig. Dies ist besonders nützlich, wenn Apps von Drittanbietern mit den Daten eines Benutzers interagieren müssen, beispielsweise bei der Verwendung von Google Kalender aus einer anderen App.

Wie ich die tokenbasierte Authentifizierung implementiert habe

Zuerst habe ich mich registriert und den Token erhalten:

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

Sobald ich den Token erhalten habe, habe ich ihn für zukünftige Anfragen verwendet:

GET https://secrets-api.appbrewery.com/secrets/1
Nach dem Login kopieren

So habe ich die tokenbasierte Authentifizierung in meiner App mithilfe von Bearer-Tokens implementiert:

// 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);
  }
});
Nach dem Login kopieren

Alles zusammenfügen

Um meine Erkenntnisse zusammenzufassen, habe ich eine kleine Web-App erstellt, die alle vier Arten von API-Anfragen implementiert (keine Authentifizierung, Basisauthentifizierung, API-Schlüssel und tokenbasiert). Die App verfügt über vier Schaltflächen, die jeweils eine andere Art von Anfrage auslösen.

Hier ist ein kleiner Vorgeschmack darauf, wie ich die Routen und Schaltflächen in der App eingerichtet habe:

// 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);
  }
});
Nach dem Login kopieren

Den vollständigen Code für die App finden Sie hier: GitHub Repo.

이 앱은 API 인증의 중요성과 Node.js 환경에서 요청을 처리하기 위해 Axios를 사용하여 API 인증을 구현하는 방법을 보여줍니다.


내가 직면한 어려움

이 프로젝트를 진행하는 동안 Axios를 통해 요청을 보내는 데 문제가 발생했습니다. 특히 기본 인증에서 문제가 발생했습니다. 좀 더 조사한 후에 혼란을 해소해주는 유용한 StackOverflow 게시물을 발견했습니다. 비슷한 문제가 발생한다면 꼭 확인해 보세요!


결론

API 오용을 방지하고 무단 액세스를 제한하려면 API 인증을 이해하는 것이 필수적입니다. 기본 인증, API 키, 토큰 기반 승인을 구현하면 API를 보호하고 책임감 있게 사용할 수 있습니다.

주요 시사점:

  • 기본 인증은 간단하지만 그다지 안전하지는 않습니다.
  • API 키 승인을 통해 요청을 추적할 수 있지만 쉽게 공유할 수 있습니다.
  • 토큰 기반 인증은 가장 안전하며 OAuth 시스템에서 자주 사용됩니다.

이 게시물이 다양한 유형의 API 인증을 이해하는 데 도움이 되었기를 바랍니다! 아래 댓글에 질문이나 피드백을 남겨주세요. 즐거운 코딩하세요! ?

Das obige ist der detaillierte Inhalt vonEin Anfängerleitfaden zur API-Authentifizierung: Von den Grundlagen bis zur Implementierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage