Gibt es vorhandene Benutzerauthentifizierungsbibliotheken für node.js? Insbesondere suche ich nach etwas, das die Kennwortauthentifizierung für einen Benutzer (unter Verwendung einer benutzerdefinierten Backend-Authentifizierungsdatenbank) durchführen und diesen Benutzer einer Sitzung zuordnen kann.
Bevor ich eine Auth-Bibliothek schrieb, dachte ich, ich würde sehen, ob die Leute von vorhandenen Bibliotheken wussten. Über eine Google-Suche konnte nichts Offensichtliches gefunden werden.
-Shreyas
omniauth
(Schienen) oder Python entsprichtsocial-auth
. PHP-Benutzer (und andere gängige Webserversprachen) können auch ihre Entsprechung hinzufügen.Antworten:
Wenn Sie nach einem Authentifizierungsframework für Connect oder Express suchen, sollten Sie Passport untersuchen: https://github.com/jaredhanson/passport
(Offenlegung: Ich bin der Entwickler von Passport)
Ich habe Passport entwickelt, nachdem ich sowohl connect-auth als auch everyauth untersucht hatte. Obwohl sie beide großartige Module sind, entsprachen sie nicht meinen Bedürfnissen. Ich wollte etwas, das leichter und unauffälliger ist.
Passport ist in separate Module unterteilt, sodass Sie nur das verwenden können, was Sie benötigen (OAuth, nur bei Bedarf). Passport stellt auch keine Routen in Ihre Anwendung bereit, sodass Sie flexibel entscheiden können, wann und wo Sie eine Authentifizierung wünschen, und Hooks steuern können, was passiert, wenn die Authentifizierung erfolgreich ist oder fehlschlägt.
Im Folgenden finden Sie beispielsweise den zweistufigen Prozess zum Einrichten der formularbasierten Authentifizierung (Benutzername und Kennwort):
Für die Authentifizierung über Facebook, Twitter usw. stehen zusätzliche Strategien zur Verfügung. Bei Bedarf können benutzerdefinierte Strategien eingebunden werden.
quelle
done(null,false,{ message:'Incorrect username.' })
Es ist schrecklich, da wir nicht wissen, was all diese Parameter sind.Sitzung + Wenn
Ich denke, der Grund, warum Sie nicht viele gute Bibliotheken gefunden haben, ist, dass die Verwendung einer Bibliothek zur Authentifizierung größtenteils überentwickelt ist.
Was Sie suchen, ist nur ein Sitzungsordner :) Eine Sitzung mit:
das ist es.
Ich bin mit Ihrer Schlussfolgerung nicht einverstanden, dass das Connect-Auth-Plugin der richtige Weg ist.
Ich verwende auch connect, aber ich verwende connect-auth aus zwei Gründen nicht:
IMHO bricht Connect-Auth die sehr leistungsfähige und einfach zu lesende Zwiebelring-Architektur von Connect. Ein No-Go - meine Meinung :). Einen sehr guten und kurzen Artikel über die Funktionsweise von connect und die Zwiebelringidee finden Sie hier .
Wenn Sie - wie geschrieben - nur ein Basis- oder http-Login mit Datenbank oder Datei verwenden möchten. Connect-Auth ist viel zu groß. Es ist mehr für Sachen wie OAuth 1.0, OAuth 2.0 & Co.
Eine sehr einfache Authentifizierung mit Connect
(Es ist vollständig. Führen Sie es einfach zum Testen aus, aber wenn Sie es in der Produktion verwenden möchten, stellen Sie sicher, dass Sie https verwenden.) (Und um REST-Prinzip-konform zu sein, sollten Sie eine POST-Anfrage anstelle einer GET-Anfrage b / c verwenden du änderst einen Zustand :)
HINWEIS
Ich habe diese Erklärung vor über einem Jahr geschrieben und habe derzeit keine aktiven Knotenprojekte. Es kann also zu API-Änderungen in Express kommen. Bitte fügen Sie einen Kommentar hinzu, wenn ich etwas ändern sollte.
quelle
Das Connect-Auth-Plugin zur Connect-Middleware ist genau das, was ich brauche: http://wiki.github.com/ciaranj/connect-auth/creating-a-form-based-strategy
Ich verwende Express [ http://expressjs.com ], daher passt das Connect-Plugin sehr gut, da Express von Connect in eine Unterklasse (ok - Prototyp) unterteilt ist
quelle
Ich suchte im Grunde das Gleiche. Insbesondere wollte ich Folgendes:
Am Ende habe ich meine eigene Middleware-Funktion erstellt
check_auth
, die ich als Argument für jede Route übergeben möchte, die authentifiziert werden soll.check_auth
Überprüft lediglich die Sitzung. Wenn der Benutzer nicht angemeldet ist, leitet er ihn wie folgt auf die Anmeldeseite weiter:Dann stelle ich für jede Route sicher, dass diese Funktion als Middleware übergeben wird. Beispielsweise:
Schließlich müssen wir den Anmeldevorgang tatsächlich abwickeln. Das ist unkompliziert:
In jedem Fall war dieser Ansatz meist flexibel und einfach gestaltet. Ich bin sicher, es gibt zahlreiche Möglichkeiten, dies zu verbessern. Wenn Sie welche haben, würde ich mich sehr über Ihr Feedback freuen.
EDIT: Dies ist ein vereinfachtes Beispiel. In einem Produktionssystem möchten Sie niemals Passwörter im Klartext speichern und vergleichen. Wie ein Kommentator hervorhebt, gibt es Bibliotheken, die bei der Verwaltung der Kennwortsicherheit helfen können.
quelle
Auch einen Blick auf everyauth wenn Sie Dritter / soziales Netzwerk Login Integration wollen.
quelle
Hier ist ein Code für die grundlegende Authentifizierung aus einem meiner Projekte. Ich benutze es gegen CouchDB mit und zusätzlichem Authentifizierungsdaten-Cache, aber ich habe diesen Code entfernt.
Wickeln Sie eine Authentifizierungsmethode um Ihre Anforderungsbearbeitung und geben Sie einen zweiten Rückruf für eine nicht erfolgreiche Authentifizierung an. Der erfolgreiche Rückruf erhält den Benutzernamen als zusätzlichen Parameter. Vergessen Sie nicht, Anforderungen mit falschen oder fehlenden Anmeldeinformationen im Fehlerrückruf korrekt zu behandeln:
quelle
Eine andere Sichtweise der Authentifizierung ist Passwordless, eine tokenbasierte Authentifizierung für Express, das das inhärente Problem von Passwörtern umgeht [1]. Es ist schnell zu implementieren, erfordert nicht zu viele Formulare und bietet eine bessere Sicherheit für den durchschnittlichen Benutzer (vollständige Offenlegung: Ich bin der Autor).
[1]: Passwörter sind veraltet
quelle
Einige Jahre sind vergangen und ich möchte meine Authentifizierungslösung für Express vorstellen. Es heißt Lockit . Sie finden das Projekt auf GitHub und ein kurzes Intro in meinem Blog .
Was sind also die Unterschiede zu den bestehenden Lösungen?
require('lockit')
,lockit(app)
getanusername
undpassword
.Schauen Sie sich die Beispiele an .
quelle
Es gibt ein Projekt namens Drywall , das ein Benutzeranmeldesystem mit Passport implementiert und über ein Administrationsfenster für die Benutzerverwaltung verfügt. Wenn Sie nach einem voll funktionsfähigen Benutzerauthentifizierungs- und -verwaltungssystem suchen, das dem ähnelt, was Django nur für Node.js bietet, dann ist dies genau das Richtige. Ich fand es ein wirklich guter Ausgangspunkt für die Erstellung einer Knoten-App, für die ein Benutzerauthentifizierungs- und -verwaltungssystem erforderlich ist. Siehe Jared Hanson Antwort für Informationen darüber , wie Passport funktioniert.
quelle
Hier sind zwei beliebte Github-Bibliotheken für die Authentifizierung von Knoten js:
https://github.com/jaredhanson/passport (empfehlenswert)
https://nodejsmodules.org/pkg/everyauth
quelle
Schnelles einfaches Beispiel mit Mongo für eine API, die Benutzerauthentifizierung für den Angular-Client bereitstellt
in app.js.
für deine Route so etwas:
Dann können Sie in Ihren Routen, für die eine Authentifizierung erforderlich ist, einfach nach der Benutzersitzung suchen:
quelle
Hier ist eine neue Authentifizierungsbibliothek, die zeitgestempelte Token verwendet. Die Token können per E-Mail oder SMS an Benutzer gesendet werden, ohne dass sie in einer Datenbank gespeichert werden müssen. Es kann für die kennwortlose Authentifizierung oder für die Zwei-Faktor-Authentifizierung verwendet werden.
https://github.com/vote539/easy-no-password
Offenlegung: Ich bin der Entwickler dieser Bibliothek.
quelle
Wenn Sie eine Authentifizierung mit SSO (Single Sign On) mit einem Microsoft Windows-Benutzerkonto benötigen. Sie können https://github.com/jlguenego/node-expose-sspi ausprobieren .
Sie erhalten ein
req.sso
Objekt, das alle Client-Benutzerinformationen enthält (Login, Anzeigename, Sid, Gruppen).Haftungsausschluss: Ich bin der Autor von node-expose-sspi.
quelle
sweet-auth
Ein leichtes Benutzerauthentifizierungsmodul ohne Konfiguration. Es wird keine sperate Datenbank benötigt.
https://www.npmjs.com/package/sweet-auth
Es ist so einfach wie:
quelle