2013-08-11 12 views
14

Uważam, że najlepszą praktyką w przypadku usług RESTful API jest posiadanie statusu bezpaństwowca. Przeczytałem trochę o uwierzytelnianiu bezstanowym, ale nie jestem do końca jasne, jak go wdrożyć (wygląda jak bałagan tokenów itp.). PassportJS to przyjemna biblioteka uwierzytelniająca, ale nie jest bezstanowa? Czy jest jakaś biblioteka, która pomaga mi tworzyć bezpaństwowe API (z uwierzytelnianiem)? Będę chciał użyć SSO (jednokrotnego logowania), takiego jak Google, Twitter itp., Więc będzie miło, jeśli biblioteka zajmie się tym dla mnie (jak robi to PassportJS).Bezpaństwowa biblioteka uwierzytelniająca w usłudze NodeJS

+0

Kiedy mówisz "bezpaństwowiec", zakładam, że masz na myśli, że nie zapisano informacji o sesji dla użytkownika po stronie serwera. Jeśli chcesz tego, możesz użyć oprogramowania pośredniczącego "cookiesession" dostarczonego przez biblioteki connect/express. Prawdopodobnie tego właśnie chcesz, ale możesz rozwinąć swoją interpretację uwierzytelniania bezstanowego, aby pomóc. – user568109

+0

@ user568109, masz rację, bezpaństwowcem, co oznacza brak informacji o sesji na serwerze. "cookiesession" wygląda na to, czego potrzebuję, ale nadal muszę wymyślić część uwierzytelniania. PassportJS niesamowita biblioteka uwierzytelniania używa sesji, zastanawiam się, czy jest możliwe, aby działało z 'cookiesession' lub jakoś uczynić PassportJS bezpaństwowcem? –

Odpowiedz

24

Aktualnie pracuję nad REST API i korzystam z PassportJS Basic Auth (dla celów programistycznych) bez sesji. Możesz powiedzieć strategii, aby nie używać sesji:

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

Zobacz here na dole.

+2

Jestem trochę nowy w tym. Jeśli chcę, aby użytkownicy uwierzytelniali się za pośrednictwem stron trzecich, takich jak Google, GitHub itp., Które, jak sądzę, również korzystają z OAuth 2, jak to skonfigurować? W jaki sposób dostawcy (Google, Facebook, Twitter) odnoszą się do API (Basic, OAuth, OAuth 2)? –

6

@fakewaffle ma rację. Możesz ustawić paszport bezstanowy, ustawiając sesję na wartość false.

Opracowałem serwer Oauth2 przy użyciu oauth2rize. https://github.com/jaredhanson/oauth2orize/. Używam go, aby zapewnić dostęp do tokenów do klienta, które są następnie wysyłane z każdym żądaniem w nagłówku authorization. Te żetony są przechowywane w bazie danych i dlatego są bezpaństwowcami.

Można oczywiście użyć innych dostawców do uwierzytelnienia użytkownika i udostępnienia tokena dla klienta.

Passport.js udostępnia wielu dostawców uwierzytelniania, których można używać do uwierzytelniania za pośrednictwem dostawców zewnętrznych, takich jak Facebook, Twitter itp. Tutaj znajduje się link do dostawcy uwierzytelniania facebook http://passportjs.org/guide/facebook/.

Czy ta odpowiedź na pytanie, czy jest coś innego, co chcesz zrobić?

+1

'oauth2orize' jest czymś, czego mogę użyć, jeśli chcę utworzyć dostawcę OAuth? Jeśli chcę umożliwić moim użytkownikom logowanie/rejestrację za pośrednictwem Google/GitHub/etc, użyję odpowiednich dostawców usługi PassportJS, prawda? Jeśli tak, chcę, aby stały się bezpaństwowcami, jak to powinno działać? Nie jest to udokumentowane, więc mogę użyć: "paszport.authenticate (" google ", {'session': false})'? –

+0

Ponadto, "* żetony są przechowywane w bazie danych, a zatem są bezpaństwowcem *": więc mógłbym użyć 'redis-sessions' bez zmian kodu w stronie PassportJS i wszystko będzie" bezpaństwowe "? –

+0

Tak, myślę, że możesz użyć 'redis-sessions', chociaż sam nie używałem redisa. I tak, 'oauth2rize' służy do tworzenia własnego dostawcy OAuth. Czy możesz wyjaśnić, co dokładnie masz na myśli przez bezpaństwowców, więc mogę odpowiedzieć z większą pewnością siebie. – RohanJ