Inhaltsübersicht
Dieser Artikel erweitert ein früheres Tutorial zur grundlegenden CRUD-API-Erstellung mit Express.js und konzentriert sich auf wichtige Sicherheitsaspekte: Validierung, Authentifizierung und Autorisierung. Wir bauen auf dem vorherigen Beispiel auf, daher wird empfohlen, mit diesem Material vertraut zu sein. Das vollständige Projekt ist auf GitHub verfügbar (Link unten angegeben).
Schlüsselkonzepte
Validierung: Sicherstellen, dass vom Benutzer bereitgestellte Daten den vordefinierten Regeln und Standards entsprechen. Dies ist aus Sicherheitsgründen von größter Bedeutung und verhindert Schwachstellen wie SQL-Injection. Mehrere Ressourcen unterstreichen die Bedeutung einer robusten Validierung (Links unten).
Authentifizierung:Überprüfung der Identität eines Benutzers. Dabei werden in der Regel Anmeldeinformationen (z. B. Benutzername/E-Mail-Adresse und Passwort) anhand gespeicherter Datensätze überprüft.
Autorisierung: Bestimmen, welche Aktionen ein Benutzer ausführen darf. Dies steuert den Zugriff auf Ressourcen basierend auf Benutzerrollen und Berechtigungen.
Implementierung der Validierung
Wir erstellen Validierungsfunktionen für die Felder name
, amount
und date
:
name
: Zeichenfolge, nicht leer, 10–255 Zeichen.amount
: Zahl oder numerische Zeichenfolge, positiv, nicht leer.date
: Zeichenfolge, optional (standardmäßig das aktuelle Datum, wenn weggelassen), JJJJ-MM-TT-Format.Diese Funktionen (in validations.js
) nutzen Typprüfung und grundlegende Formatvalidierung. Eine umfassendere Validierung (z. B. Datumsbereichsprüfungen) könnte hinzugefügt werden.
<code class="language-javascript">// validations.js (excerpt) const isString = (arg) => typeof arg === "string"; const isNumber = (arg) => !isNaN(Number(arg)); function isValidName(name) { /* ... */ } function isValidAmount(amount) { /* ... */ } function isValidDate(date) { /* ... */ } module.exports = { isValidName, isValidAmount, isValidDate };</code>
Authentifizierung und Autorisierung hinzufügen
Zur Demonstration verwenden wir In-Memory-Datenspeicher (ein Array von Objekten) für Benutzer und Ausgaben. Dies ist nicht für die Produktion geeignet.
In der data.js
-Datei werden Benutzer- und Ausgabendaten gespeichert:
<code class="language-javascript">// data.js (excerpt) let users = [ { id: "...", email: "...", password: "..." }, //Example User // ...more users ]; let expenditures = [ { id: "...", userId: "...", name: "...", amount: ..., date: "..." }, //Example Expense // ...more expenses ]; module.exports = { expenditures, users };</code>
Anmeldeendpunkt (/users/signup
)
Dieser Endpunkt erstellt neue Benutzer. Es validiert E-Mail und Passwort, prüft auf E-Mail-Duplikate, generiert eine UUID und speichert (nur für diese Demo) das Rohpasswort. Ein Base64-codiertes Authentifizierungstoken (email:UUID) wird zurückgegeben. Der Einfachheit halber wird auf Passwort-Hashing verzichtet, ist aber in einer Produktionsumgebung von entscheidender Bedeutung.
Anmeldeendpunkt (/users/login
)
Dieser Endpunkt authentifiziert vorhandene Benutzer. Es validiert Anmeldeinformationen und gibt bei Erfolg ein Base64-codiertes Authentifizierungstoken zurück.
Geschützte Endpunkte
Um Endpunkte zu schützen (z. B. /expenditures
), benötigen wir ein Authentifizierungstoken in den Anforderungsheadern (Authorization
-Header). Das Token wird dekodiert, der Benutzer verifiziert und nur die eigenen Daten des Benutzers werden zurückgegeben.
<code class="language-javascript">// validations.js (excerpt) const isString = (arg) => typeof arg === "string"; const isNumber = (arg) => !isNaN(Number(arg)); function isValidName(name) { /* ... */ } function isValidAmount(amount) { /* ... */ } function isValidDate(date) { /* ... */ } module.exports = { isValidName, isValidAmount, isValidDate };</code>
Fazit
Dieser Artikel bietet eine grundlegende Einführung in die Validierung, Authentifizierung und Autorisierung in einer Node.js/Express.js-API. Denken Sie daran, dass die hier gezeigten Sicherheitsmaßnahmen zu Bildungszwecken vereinfacht sind und nicht in Produktionssystemen verwendet werden sollten. Produktionsreife Anwendungen erfordern robustes Passwort-Hashing, sichere Token-Verwaltung (JWTs werden empfohlen) und Datenbankintegration.
Ressourcen
(Denken Sie daran, die Platzhalter in Klammern durch tatsächliche Links zu ersetzen.)
Das obige ist der detaillierte Inhalt vonValidierung, Authentifizierung und Autorisierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!