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:
Lasst uns anfangen!
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.
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.
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 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
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); } });
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.
Ein wichtiger Unterschied, den Sie sich merken sollten:
Mit der API-Schlüsselautorisierung erhalten Sie normalerweise einen API-Schlüssel wie diesen:
GET https://secrets-api.appbrewery.com/generate-api-key
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
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); } });
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.
Zuerst habe ich mich registriert und den Token erhalten:
POST https://secrets-api.appbrewery.com/get-auth-token { "username": "jackbauer", "password": "IAmTheBest" }
Sobald ich den Token erhalten habe, habe ich ihn für zukünftige Anfragen verwendet:
GET https://secrets-api.appbrewery.com/secrets/1
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); } });
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); } });
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 인증을 이해하는 데 도움이 되었기를 바랍니다! 아래 댓글에 질문이나 피드백을 남겨주세요. 즐거운 코딩하세요! ?
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!