2016-01-04 14 views
9

PassportJS utilizza l'autenticazione Facebook sufficiente per un back-end iOS con Node JS?Autenticazione (Passport) sufficiente per la sicurezza con il server di backend Node js?

Ho anche il pacchetto toobusy per rifiutare le richieste quando le cose sono occupate (immagino che sarebbe un bene per DDOS).

Sto pensando di utilizzare nginx come proxy inverso anche sul mio server Node.JS.

Quali sono alcune altre misure di sicurezza che possono essere ridimensionate? Alcuni consigli e suggerimenti? Qualcosa che riguarda la sicurezza che dovrei essere preoccupato per la sessione autenticata di PassportJS non può essere gestita?

risposta

6

E 'un po' difficile da stipare in tutte le best practice relative alla sicurezza in un posto, ma per quello che è vale la pena, ecco la mia versione del problema.

Fornire l'autenticazione e protezione sono due cose separate. PassportJS sarà in grado di gestire tutto ciò che riguarda l'autenticazione , ma è una cosa completamente diversa che impedisce di essere ingannato o sopraffatto.

Uno (grande) motivo per mettere PasswordJS dietro un reverse proxy (RP) è che sarete in grado di fornire una prima linea di difesa per tutto ciò che riguarda HTTP: intestazione/lunghezza del corpo/dati, metodi consentiti, duplicato/intestazioni indesiderate, ecc.

Nginx/Apache/HAProxy forniscono tutti eccellenti servizi per gestire questi casi e sul lato superiore, si ottiene anche una buona separazione delle preoccupazioni: lasciare che il proxy inverso gestisca la sicurezza e lasciare che PassportJS gestisca autenticazione. Per quanto riguarda l'architettura, avrà anche più senso perché sarete in grado di nascondere il numero e l'infrastruttura dei nodi PassportJS. Fondamentalmente, vuoi farlo apparire in quanto vi è un solo punto di accesso per i tuoi clienti. Il ridimensionamento sarà anche più facile con questa architettura. Come sempre, assicurati che i tuoi RP mantengano il minore stato possibile, preferibilmente nessuno, in modo da scalare linearmente.

Per configurare correttamente il tuo RP, devi veramente capire come funzionano i protocolli PassportJS (nel caso in cui desideri fornire più metodi di autenticazione rispetto a quelli di Facebook).Sapendo questo, è possibile impostare il/i tuo/i RP su:

  • Rifiutare qualsiasi richiesta HTTP non consentita (TRACCIA, OPZIONE, INSERIMENTO, ELIMINA, ecc.).
  • Rifiuta richieste/intestazioni/carico utile superiori a una dimensione nota.
  • Load-balance dei nodi PassportJS.

Una cosa di essere alla ricerca di in termini di bilanciamento del carico sono sessioni appiccicoso. Alcuni autenticatori memorizzano tutto il loro stato in un cookie crittografato, altri saranno un semplice handle di sessione, che può essere compreso solo dal nodo che ha creato la sessione. Quindi, a meno che non sia abilitata la condivisione delle sessioni per quest'ultimo tipo (se hai bisogno della resilienza di PassportJS), devi configurare il tuo RP per gestire sessioni persistenti. Questa dovrebbe essere la quantità massima di stato che dovrebbero gestire. Configurato correttamente, potrebbe funzionare anche se è necessario riavviare un RP.

Come indicato diligentemente, toobusy (o equivalente) deve essere in posizione per gestire la limitazione. Nella mia esperienza, HAProxy è un po 'più facile da gestire rispetto agli altri RP per quanto riguarda la limitazione, ma toobusy dovrebbe funzionare bene, specialmente se si è già familiari con esso.

Un'altra cosa che può essere o non essere nel controllo è il partizionamento di rete. Ovviamente, gli RP devono essere accessibili, ma dovrebbero fungere da relè per i nodi PassportJS. La migliore pratica, se possibile, è quella di mettere i tuoi nodi di autenticazione su una rete/DMZ separata dai tuoi server di back-end, in modo che non possano essere raggiunti direttamente se non attraverso l'RP. Se compromessi, non dovrebbero essere usati come trampolini di lancio per il back-end/rete interna.

+0

Grazie per la risposta, Daniel! – Lucky

2

Come da documentazione del passaporto: "supporto autenticazione utilizzando un nome utente e password, Facebook, Twitter e altro."

È il middleware, con il quale fornisce la possibilità di integrare più tipi di metodi di sicurezza con NodeJS.

È necessario considerare lo scopo dell'applicazione, è solo il supporto dell'autenticazione Facebook o del processo di registrazione/login personalizzato. Se fornisce una seconda opzione, in tal caso, è meglio non fare affidamento su authtoken di qualsiasi sito di social network come Facebook/Twitter o qualsiasi altro.

L'opzione migliore è creare il proprio token come token JWT e collegarlo con l'utente da più piattaforme. Ti aiuterà ad estendere la portata del tuo progetto per integrare altri siti di social networking.

Questo è il collegamento per integrare JWT in NodeJS.

https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

Allo stesso modo ci sono molti altri blog e tutorial disponibili sul mercato per integrare JWT con NodeJS

+0

Grazie anche per la risposta, Ankit – Lucky

Problemi correlati