2013-08-11 10 views
14

Ich glaube, dass die Best Practice für RESTful-APIs zustandslos ist. Ich lese etwas über die staatenlose Authentifizierung, bin mir aber nicht ganz im Klaren darüber, wie man es implementiert (sieht aus wie ein Durcheinander von Tokens usw.). PassportJS ist eine nette Authentifizierungsbibliothek, aber nicht staatenlos? Gibt es eine Art Bibliothek, die mir hilft, statusfreie APIs (mit Authentifizierung) zu erstellen? Ich werde SSO (single sign on) wie Google, Twitter usw. verwenden, also wird es nett sein, wenn die Bibliothek das für mich übernimmt (wie PassportJS).Stateless Authentication Library in NodeJS

+0

Wenn Sie Stateless sagen, nehme ich an, Sie meinen, dass keine Sitzungsinformationen über den Benutzer auf der Serverseite gespeichert sind. Wenn Sie dies möchten, können Sie die Middleware "cookiesession" verwenden, die von connect/express-Bibliotheken bereitgestellt wird. Wahrscheinlich ist das, was Sie wollen, aber können Sie Ihre Interpretation der staatenlosen Authentifizierung weiter ausführen, so dass ich Ihnen helfen kann. – user568109

+0

@ user568109, Sie haben Recht, Stateless bedeutet keine Session-Informationen auf dem Server. 'cookiesession' sieht aus wie ich es brauche, aber ich muss noch den Authentifizierungsteil herausfinden. PassportJS eine geniale Authentifizierungsbibliothek verwendet Sitzungen, fragt sich, ob es möglich ist, es mit 'cookiesession' arbeiten zu lassen oder PassportJS irgendwie staatenlos zu machen? –

Antwort

24

Ich entwickle derzeit eine REST-API und benutze PassportJS Basic Auth (für Dev-Zwecke) ohne Sitzungen. Sie können die Strategie sagen, nicht-Sitzungen verwenden:

passport.authenticate('basic', { 'session' : false }) 
passport.authenticate('bearer', { 'session' : false }) 
passport.authenticate('token', { 'session' : false }) 

here am Boden sehen.

+2

Ich bin irgendwie neu dazu. Wenn ich möchte, dass sich Benutzer über Dritte wie Google, GitHub usw. authentifizieren, von denen ich glaube, dass sie auch OAuth 2 verwenden, wie konfiguriere ich das? Wie verhalten sich Anbieter (Google, Facebook, Twitter) zu APIs (Basic, OAuth, OAuth 2)? –

6

@fakewaffle hat Recht. Sie können den Pass statusfrei machen, indem Sie die Sitzung auf false setzen.

Ich habe einen Oauth2-Server mit oauth2rize entwickelt. https://github.com/jaredhanson/oauth2orize/. Ich benutze es Zugang Token zum Client, die dann mit jeder Anfrage in authorization Header gesendet werden. Diese Token werden in der Datenbank gespeichert und sind daher zustandslos.

Sie können natürlich andere Anbieter verwenden, um Benutzer zu authentifizieren und dem Client Zugriffstoken bereitzustellen.

Passport.js bietet mehrere Authentifizierungsanbieter an, die zur Authentifizierung über Drittanbieter wie Facebook, Twitter usw. verwendet werden können. Hier ist der Link zum facebook Auth Provider http://passportjs.org/guide/facebook/.

Beantworten Sie die Frage oder möchten Sie etwas anderes tun?

+1

'oauth2orize' kann ich verwenden, wenn ich einen OAuth-Provider erstellen möchte? Wenn ich meinen Nutzern erlauben möchte, sich über Google/GitHub/etc anzumelden/registrieren, werde ich die entsprechenden PassportJS-Anbieter nutzen? Wenn ich sie staatenlos machen will, wie soll das funktionieren? Es ist nicht dokumentiert, also kann ich verwenden: 'pass.authenticate ('google', {'session': false})' '? –

+0

Auch "* Token sind in der Datenbank gespeichert und sind daher zustandslos *": so konnte ich 'redisis-sessions' ohne Änderungen am Code in PassportJS 's Sache verwenden und alles wird" zustandslos "sein? –

+0

Ja, ich denke, du kannst 'redisis-sessions' verwenden, obwohl ich selbst nicht redisisiere. Und ja, 'oauth2rize' wird verwendet, um einen eigenen OAuth-Provider zu erstellen. Kannst du mir auch erklären was genau meinst du mit Staatenlos, damit ich mit etwas mehr Zuversicht antworten kann. – RohanJ