Die Implementierung der grundlegenden HTTP-Authentifizierung mit Express v3 war anscheinend trivial:
app.use(express.basicAuth('username', 'password'));
Version 4 (ich verwende 4.2) hat die basicAuth
Middleware jedoch entfernt, sodass ich ein wenig festgefahren bin. Ich habe den folgenden Code, aber er veranlasst den Browser nicht, den Benutzer zur Eingabe von Anmeldeinformationen aufzufordern. Dies ist das, was ich möchte (und was ich mir bei der alten Methode vorstelle):
app.use(function(req, res, next) {
var user = auth(req);
if (user === undefined || user['name'] !== 'username' || user['pass'] !== 'password') {
res.writeHead(401, 'Access invalid for user', {'Content-Type' : 'text/plain'});
res.end('Invalid credentials');
} else {
next();
}
});
Antworten:
Einfache Basisauthentifizierung mit Vanille-JavaScript (ES6)
Hinweis: Diese "Middleware" kann in jedem Handler verwendet werden. Entfernen Sie einfach
next()
die Logik und kehren Sie sie um. Siehe das folgende Beispiel mit 1 Anweisung oder den Bearbeitungsverlauf dieser Antwort.Warum?
req.headers.authorization
enthält den Wert "Basic <base64 string>
", kann aber auch leer sein und wir möchten nicht, dass er fehlschlägt, daher die seltsame Kombination von|| ''
atob()
undbtoa()
daher derBuffer
ES6 -> ES5
const
ist nurvar
.. Art(x, y) => {...}
ist nurfunction(x, y) {...}
const [login, password] = ...split()
ist nur zweivar
Aufgaben in einerInspirationsquelle (verwendet Pakete)
Das obige ist super einfach sollte sehr kurz sein und schnell auf Ihrem Spielplatzserver bereitgestellt werden können. Wie in den Kommentaren erwähnt, können Passwörter auch Doppelpunktzeichen enthalten
:
. Um es korrekt aus dem b64auth zu extrahieren , können Sie dies verwenden.Grundlegende Authentifizierung in einer Anweisung
... auf der anderen Seite, wenn Sie immer nur eine oder sehr wenige Anmeldungen verwenden, ist dies das absolute Minimum, das Sie benötigen: (Sie müssen die Anmeldeinformationen überhaupt nicht analysieren)
PS: Müssen Sie sowohl "sichere" als auch "öffentliche" Pfade haben? Verwenden Sie
express.router
stattdessen.quelle
.split(':')
da Kennwörter mit mindestens einem Doppelpunkt erstickt werden. Solche Passwörter sind gemäß RFC 2617 gültig .const [_, login, password] = strauth.match(/(.*?):(.*)/) || []
für den Doppelpunkt verwenden.!==
Sie Kennwörter vergleichen, sind Sie anfällig für Timing-Angriffe. en.wikipedia.org/wiki/Timing_attack Stellen Sie sicher, dass Sie einen konstanten Zeitstringvergleich verwenden.Buffer.from() // for strings
oderBuffer.alloc() // for numbers
wieBuffer()
aus Sicherheitsgründen veraltet.TL; DR:
☒
express.basicAuth
ist weg☒
basic-auth-connect
ist veraltet☒
basic-auth
hat keine Logik☒
http-auth
ist ein Overkill☑
express-basic-auth
ist was du willstMehr Info:
Da Sie Express verwenden, können Sie die
express-basic-auth
Middleware verwenden.Siehe die Dokumente:
Beispiel:
quelle
challenge: true
Ein Großteil der Middleware wurde in Version 4 aus dem Express-Kern gezogen und in separate Module integriert. Das grundlegende Authentifizierungsmodul finden Sie hier: https://github.com/expressjs/basic-auth-connect
Ihr Beispiel müsste nur Folgendes ändern:
quelle
basic-auth
Bibliothek in dieser Antwort verwendetIch habe den Code für das Original verwendet
basicAuth
, um die Antwort zu finden:quelle
Ich habe in Express 4.0 die Basisauthentifizierung mit http-auth geändert , der Code lautet:
quelle
Dafür scheint es mehrere Module zu geben, einige sind veraltet.
Dieser sieht aktiv aus:
https://github.com/jshttp/basic-auth
Hier ist ein Anwendungsbeispiel:
Stellen Sie sicher, dass Sie die
auth
Middleware an der richtigen Stelle platzieren. Alle zuvor vorhandenen Middleware werden nicht authentifiziert.quelle
implement
das Protokoll noch selbstWir können die Grundberechtigung implementieren, ohne ein Modul zu benötigen
Quelle: - http://www.dotnetcurry.com/nodejs/1231/basic-authentication-using-nodejs
quelle
Express hat diese Funktionalität entfernt und empfiehlt nun die Verwendung der Basic-Auth- Bibliothek.
Hier ist ein Beispiel für die Verwendung:
Um eine Anfrage an diese Route zu senden, müssen Sie einen Autorisierungsheader einfügen, der für die Basisauthentifizierung formatiert ist.
Wenn Sie zuerst eine Curl-Anfrage senden, müssen Sie die Base64- Codierung von
name:pass
oder in diesem Fallaladdin:opensesame
gleich verwendenYWxhZGRpbjpvcGVuc2VzYW1l
Ihre Curl-Anfrage sieht dann so aus:
quelle
quelle