La migliore strategia di autorizzazione dipende dall'ambito delle tue applicazioni a breve o lungo termine.
Web monolitico o semplice con accesso privato
Ad esempio, se avrai solo un semplice Web (MERN) con un semplice backend (api rest) o un'applicazione monolitica come questa esempio di mern con un accesso interno o privato nella tua organizzazione, la tua strategia di autorizzazione potrebbe essere semplice come :
- (1*) /login express route che riceve user/password, li convalida nel database e restituisce il classico token jwt e un array di opzioni (react route) a cui l'utente dovrebbe avere accesso
- l'app web (react) deve visualizzare le pagine i cui percorsi corrispondono ai percorsi ricevuti
- l'app Web deve inviare il token ricevuto a qualsiasi chiamata dell'endpoint di riposo API
- quando l'API riceve l'invocazione da react web, deve convalidare l'esistenza del token come intestazione. Se non esiste, deve restituire un errore 403.
- (2*) Se il token esiste, deve provare a convalidarlo (ben formato, non scaduto, firma corretta, ecc.).
- (3*)Se si tratta di un token valido, è necessario eseguire un'ultima convalida:L'utente con ruolo "guest" è autorizzato a eseguire un
DELETE
a un endpoint/user/100
. - (4*) La soluzione classica consiste nell'avere alcune tabelle nel database come:utente, ruoli, ruoli_utente, autorizzazione_ruolo, opzione_autorizzazione. La tabella delle opzioni deve aver registrato tutti gli endpoint API e il relativo metodo. Anche questo potrebbe essere utilizzato per creare la relazione tra gli utenti <:> percorsi web. Controlla questo
Requisiti moderni
Le organizzazioni moderne e di grandi dimensioni richiedono:
- Accessi ai social network
- Utenti interni/esterni
- Accessi non interattivi (robot, scheduler, ecc.)
- Diverse app web
- Diverse app mobili
- Tanto riposo Api
In questo caso, l'app MERN non è una buona scelta perché è ALL-IN-ONE. La strategia comune per implementare i requisiti precedenti consiste nell'avere diversi artefatti distribuiti in diversi server:
- app web (react, vue, angular, linkstart, ecc.)
- apis rest (nodejs + expres, java, python, ecc.)
- Autenticazione/autorizzazione:piattaforma/provider oauth2, piattaforme di identità/accesso, ecc
Se questo è il tuo caso, devi dividere la tua app MERN in diversi artefatti distribuibili:web, API e sicurezza.
Auth2
Non importa se sei preoccupato solo per l'accesso o come garantire l'autenticazione e l'autorizzazione per i tuoi siti Web, API e forse le tue app mobili, avrai bisogno di:OAUTH2
Potresti sviluppare la tua piattaforma di sicurezza prendendo in considerazione (1*), (2*), (3*) e (4*) o usare qualcosa come:
- autorizzazione0
- portachiavi, ecc.
Maggiori dettagli qui:https://stackoverflow.com/a/62049409
Le tue domande
- quale metodo pensi sia migliore?
- Penso che se utilizzerai auth0, risparmierai tempo e fatica. Con auth0 hai solo bisogno di una semplice app express, con alcuni endpoint come /login, /callback, ecc. Oppure, se usi auth0 + passport.js, questi endpoint sono gestiti da passport.js
- Ti consiglio di rivedere come funziona il flusso OAUTH2 prima di utilizzare auth0 con/senza passaporto. Questo link mi ha aiutato molto.
- Qual è la differenza tra 2 e 3,
- Come ho letto, auth0 e altre piattaforme offrono un servizio di gestione degli utenti o possono connettersi al servizio degli utenti (AD/LDAP, database, API, ecc.). Quindi
- C'è un modo per implementare le regole nel passaporto (ad es. reindirizzare nuovi utenti al primo accesso)
- Sì. Puoi aggiungere un po' di logica quando il callback viene reindirizzato nei tuoi nodejs con o senza passaporto.
- Se implemento Passport con MongoDB e il mio database ha centinaia di utenti, come posso gestirli?
- Oggi il database supporta molte righe. Quindi per il tuo database di produzione prova a ottimizzarlo o monitorarlo. Un'altra opzione è assumere un amministratore di database per eseguire queste attività.
Riferimenti
- https://www.digitalocean.com/ community/tutorial/una-introduzione-a-oauth-2
- https://auth0.com/user-management
- https://stackoverflow.com/a/62049409
- https://fiware-tutorials.readthedocs. io/en/latest/roles-permissions/index.html
- https://dba. stackexchange.com/questions/36935/best-relational-database-structure-for-this-data
- https://www.mind -it.info/2010/01/09/nist-rbac-data-model/
- Gestione dell'accesso singolo utilizzando passportjs per le mie applicazioni web - condivisione dell'accesso
- https://aws.amazon.com/blogs/apn/how-to-integrate-rest-apis-with-single-page-apps-and-secure-them -using-auth0-parte-1/
- Facebook OAuth security using passport-facebook
- Django asincrono, Ajax, Jquery Information
- modelli relazionali