API -Authentifizierung ist eine der größten Herausforderungen beim Aufbau einer API und einer der größten Sicherheitslücken der API. Der korrekte Authentifizierungsmechanismus kann Sicherheitsbedrohungen vermieden und stellt sicher, dass nur autorisierte Benutzer auf die erforderlichen Daten zugreifen können.
Authentifizierung war einmal einfach, wenn es sich um serverseitige Anwendungen handelt. Eine einfache Sitzungsüberprüfung auf dem Server reicht aus, um die Benutzerberechtigungen für den Vorgang sicherzustellen. Das Aufkommen von APIs hat jedoch erhebliche Änderungen an diesen Authentifizierungsherausforderungen geführt.
Für APIs können Sie jedoch keine Sitzung implementieren. Sie können nicht garantieren, dass Ihre API immer mit einem Webbrowser aufgerufen wird, sodass Sie sich nicht auf Cookies verlassen können, um Ihre API zu schützen. Eine der Hauptmerkmale einer API ist ihre Staatenlosigkeit, was bedeutet, dass jede an die API gesendete Anfrage nicht von früheren oder nachfolgenden Anforderungen abhängt. Daher benötigen Sie eine Möglichkeit, die für Überprüfungsanfragen erforderlichen Authentifizierungs-/Autorisierungsinformationen zu tragen.
Eine effektive API -Authentifizierungstechnik besteht darin, JSON Web Token (JWT) zu verwenden. In diesem Artikel werden wir uns mit den Details von JWT befassen und eine umfassende Anleitung zur Implementierung der Rest -API mit Node.js, JWT als Sicherheitsmaßnahme angeben.
Schlüsselpunkte
Was ist ein JSON -Web -Token (JWT)?
JSON Web Token (JWT) ist ein offener Standard (RFC 7519), der eine Methode zur Übertragung von Informationen in Form eines JSON -Objekts zwischen zwei Parteien (Client und Server) definiert. Es ist wichtig zu beachten, dass die zwischen den beiden Parteien übertragenen Informationen unter Verwendung einer privaten Signatur digital signiert werden. Daher wird dies als verifiziert angesehen und die Daten können sicher verwendet werden.
Hinweis: Normalerweise wird JWT zum Erstellen von Authentifizierungs- und Autorisierungsprozessen für APIs verwendet.
Zum Beispiel sind Informationen, mit denen ein Benutzer mit einer Anforderung in Verbindung gebracht werden kann, normalerweise im JWT enthalten. Dies kann Benutzer -ID und Rollen umfassen, und Ihre API kann diese Informationen verwenden, um festzustellen, ob der Benutzer, der die Anforderung sendet, die Berechtigung hat.
Wann sollte ich JWT verwenden?
Es gibt normalerweise zwei Hauptsituationen, die ein JWT -Token verwenden müssen.
Struktur von JWT Token
Um alle Funktionen zu implementieren, ist die Struktur des JWT -Tokens spezifisch. Es hat drei Schlüsselkomponenten:
Hinweis: Ihr JWT -Token ist eine einfache Base64 -Zeichenfolge, die diese drei Komponenten enthält, die jeweils durch .
getrennt sind.
Zum Beispiel könnte ein einfaches Token so aussehen:
<code>header.payload.signature</code>
Außerdem sieht Ihr Dekodierungs -Token wie unten aus.
Wie Sie sehen können, werden die Header, die Nutzlast und die Signatur entschlüsselt und angezeigt.
JWT -Prozess
Wenn Sie nun eine API mit JWT erstellen, müssen Sie Folgendes berücksichtigen:
Dies kann der in der folgenden Abbildung gezeigten ähnlich sein.
Die Schleife startet, wenn der Benutzer eine Anfrage zum ersten Mal bei der API einmeldet. Sie bieten Benutzernamen und Passwort. Ihre API überprüft, ob die Anmeldeinformationen gültig sind und in diesem Fall ein JWT -Token für den Benutzer generieren.
Als nächstes wird Ihr Benutzer jedes Mal, wenn die Anfrage ausgeführt wird, als Träger -Token in die Anfrage -Header - Autorisierung - als Trägermark einbezogen. Ihre API muss die Anfrage -Header für alle Anfragen anzeigen und das Token dekodieren und überprüfen, um die Anfrage zu genehmigen.
Befolgen Sie diese Prozedur, wenn Sie JWT verwenden. Wenn Ihrem Header ein JWT -Token fehlt, lehnt die API die Anfrage ab.
REST -API mit jwt
bauenEine API mit JWT -Authentifizierung erstellen ist einfacher als es scheint. Es gibt viele Bibliotheken, die den Prozess der Token -Generierung und -überprüfung durch einfache API -Methoden bewältigen.
Erstellen wir also eine einfache REST -API mit JWT -Authentifizierung.
Beginnen wir damit, ein Projekt mit dem folgenden Befehl zu starten:
<code>header.payload.signature</code>
Hinweis: Stellen Sie sicher, dass Sie die Standardkonfiguration fortsetzen.
Als nächstes installieren wir die von uns verwendete JWT -Bibliothek. Verwenden wir die JSONWEBTOKE -Bibliothek, um JWT -Token zu erstellen und zu verwalten.
Hinweis: Ich habe diese Bibliothek ausgewählt, da sie häufig auf GitHub aufrechterhalten wird und mehr als 14 Millionen Downloads pro Woche hat.
installieren Sie daher die Bibliothek mit dem folgenden Befehl:
npm init
Als nächstes installieren wir Express, um die API zu erstellen. Führen Sie dazu den folgenden Befehl aus:
npm i jsonwebtoken
Erstellen wir als nächstes eine database.js
Datei. Da wir uns hier ausschließlich auf JWT konzentrieren, werde ich die Datenbank nicht starten, sondern eine Datenbank im Benutzercode verwalten. Öffnen Sie also Ihre database.js
Datei und fügen Sie den folgenden Code hinzu:
// express - 用于构建 api // cors - 用于启用跨域请求 // body-parser - 用于将主体解析为 JSON npm i express cors body-parser
Wie Sie sehen, definieren wir eine Liste von Benutzern, die auf unsere API zugreifen können.
Hinweis: Wenn Sie dies in einer Produktionsumgebung erstellen, empfehle ich, einen Dienst wie Amazon Cognito zu verwenden, um Ihre Benutzer zu verwalten, oder in Betracht ziehen, Hashing zum Speichern von Kennwörtern zu verwenden.
Erstellen Sie als nächstes eine index.js
Datei, um die API zu definieren. Öffnen Sie die Datei index.js
und geben Sie den folgenden Code an: (Hier wird hier viel Code weggelassen, da das ursprüngliche Code -Beispiel zu windig ist und unnötige Details enthält, wie z. Umgebungen
index.js (Empfehlungsvorschläge für Schlüsselteile):
Zunächst müssen Sie einen sicheren definieren und ihn niemals in Ihrem Code festhärten, aber sie sollten es aus Umgebungsvariablen lesen. tokenSecret
Dann sollte Ihr Anmeldendpunkt so aussehen:
const users = [ { id: '1', name: 'Lakindu', username: 'lak', password: '1234', role: 'customer' }, { id: '2', name: 'David', username: 'david', password: '1234', role: 'customer' }, { id: '3', name: 'John', username: 'john', password: '1234', role: 'customer' }, { id: '4', name: 'Nishanthan', username: 'nishanthan', password: '1234', role: 'customer' }, { id: '5', name: 'Pasindu', username: 'pasindu', password: '1234', role: 'customer' }, { id: '6', name: 'Sahan', username: 'sahan', password: '1234', role: 'admin' }, ] module.exports = { users }
Datenbankdesign:
const tokenSecret = process.env.TOKEN_SECRET; // 从环境变量读取密钥 if (!tokenSecret) { console.error("TOKEN_SECRET environment variable not set!"); process.exit(1); }
Fehlerbehandlung:
Eine vollständige Fehlerbehandlungsmechanismen, z. B. Datenbankfehler, JWT -Überprüfungsfehler usw., sind erforderlich.Sicherheit:
Denken Sie daran, dieses Beispiel ist nur eine einfache Demonstration und ist nicht für Produktionsumgebungen geeignet. In Produktionsumgebungen müssen Sie strengere Sicherheitsmaßnahmen ergreifen, wie:Der Rest der Teile (Überprüfung von Middleware und Routing -Schutz) muss basierend auf dem geänderten Anmeldendpunkt und der Datenbankstruktur entsprechend angepasst werden. Denken Sie daran, immer die Sicherheit zu priorisieren und gut getestete und gepflegte Bibliotheken zu verwenden.
Zusammenfassung
Dieser Artikel bietet kurz einen Überblick darüber, wie eine sichere REST -API mit JWT erstellt wird. Um jedoch in einer Produktionsumgebung bereitzustellen, müssen Sie die Sicherheit sorgfältig berücksichtigen und robustere Datenbanken und Fehlerbehandlungsmechanismen verwenden. Denken Sie daran, dass Sicherheit ein fortlaufender Prozess ist, der eine kontinuierliche Verbesserung und Aktualisierung erfordert.
FAQs (FAQs) (Die langen FAQs -Abschnitte im Originaltext werden hier weggelassen, da sie mit den oben angegebenen Änderungsvorschlägen wiederholt werden)
Das obige ist der detaillierte Inhalt vonVerwenden von JSON -Web -Token mit node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!