2013-08-11 29 views
14

Credo che la migliore pratica per le API RESTful sia quella di essere apolidi. Ho letto abit riguardo all'autenticazione stateless ma non sono completamente chiaro come implementarlo (sembra un casino di token, ecc.). PassportJS è una bella libreria di autenticazione, ma non è stateless? C'è qualche tipo di libreria che mi aiuta a creare API senza stato (con autenticazione)? Userò SSO (single sign on) come Google, Twitter ecc. Quindi sarà bello se la libreria lo gestisce per me (come fa PassportJS).Stateless Authentication Library in NodeJS

+0

Quando parli di apolidi, presumo tu voglia dire che nessuna informazione di sessione è memorizzata sull'utente sul lato server. Se lo si desidera, è possibile utilizzare il middleware 'cookieession' fornito dalle librerie connect/express. Probabilmente questo è quello che vuoi ma puoi approfondire la tua interpretazione dell'autenticazione stateless, così posso aiutarti. – user568109

+0

@ user568109, hai ragione, stateless che significa nessuna informazione di sessione sul server. 'cookieession' sembra quello di cui ho bisogno, ma ho ancora bisogno di capire la parte di autenticazione. PassportJS una libreria di autenticazione impressionante utilizza sessioni, si chiede se è possibile farlo funzionare con 'cookieession' o in qualche modo rendere passelessJS stateless? –

risposta

24

Attualmente sto sviluppando un'API REST e utilizzando PassportJS Basic Auth (per scopi di sviluppo) senza sessioni. Si può dire la strategia di non usare le sessioni:

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

Vedi here in fondo.

+2

Sono un po 'nuovo a questo. Se voglio che gli utenti si autenticano tramite terze parti come Google, GitHub, ecc., Che credo utilizzino anche OAuth 2, come posso configurarlo? In che modo i provider (Google, Facebook, Twitter) si riferiscono alle API (Basic, OAuth, OAuth 2)? –

6

@fakewaffle ha ragione. È possibile rendere passaporto stateless impostando la sessione su false.

Ho sviluppato un server Oauth2 utilizzando oauth2rize. https://github.com/jaredhanson/oauth2orize/. L'utilizzo fornisce token di accesso al client, che vengono quindi inviati con ogni richiesta nell'intestazione authorization. Questi token sono memorizzati nel database e sono quindi privi di stato.

Naturalmente è possibile utilizzare altri provider per autenticare l'utente e fornire token di accesso al client.

Passport.js fornisce più provider di autenticazione che possono essere utilizzati per l'autenticazione attraverso fornitori 3rd party come Facebook, Twitter, ecc Ecco link per facebook fornitore di autenticazione http://passportjs.org/guide/facebook/.

Questo risponde alla domanda o c'è qualcos'altro che vuoi fare?

+1

'oauth2orize' è qualcosa che posso usare se voglio creare un provider OAuth? Se voglio consentire ai miei utenti di accedere/registrarsi tramite Google/GitHub/etc, userò i rispettivi provider di PassportJS giusto? Se è così, voglio renderli apolidi, come dovrebbe funzionare? Non è documentato, quindi posso usare: 'passport.authenticate ('google', {'session': false})'? –

+0

Inoltre, "* i token sono archiviati nel database e quindi sono privi di stato *": quindi potrei usare 'redis-sessions' senza modifiche al codice nella parte di PassportJS e tutto sarà" senza stato "? –

+0

Sì, penso che tu possa usare 'redis-sessions', anche se non ho usato i redis da solo. E sì, 'oauth2rize' è usato per creare il tuo provider OAuth. Puoi anche spiegare cosa intendi per apolidia, quindi posso rispondere con un po 'più di confidenza. – RohanJ