Quando costruisci app angolari, ecco la mia filosofia generale in poche parole. Posso aggiungere ulteriori chiarimenti, se necessario.
Tutta la sicurezza attuale deve essere implementata sul lato server. Qualsiasi logica di sicurezza inserita nell'app angolare (e dovrebbe esserci) è solo per comodità e usabilità, non per sicurezza reale.
Devi aprire le tue chiamate API REST in nodejs utilizzando un qualche tipo di autenticazione e schema di autorizzazione, e dovresti restituire un 401 a qualsiasi client che richiede dati o tenta di salvare i dati a cui non hanno accesso.
Allo stesso tempo, è una cattiva idea mostrare agli utenti funzionalità che non funzioneranno (vale a dire, restituirà un 401). Quindi, se c'è un pulsante che fa qualcosa che un utente non è autorizzato a fare, dovresti nasconderlo da loro prima che abbiano la possibilità di cliccarci sopra e ricevere un errore.
Per fare ciò, è necessario inviare le informazioni sul client al livello di accesso degli utenti attualmente autenticati e aumentare la visibilità di funzionalità / comportamento. Ma capisci che questo è facilmente aggirato da un utente sofisticato (usando gli Strumenti di sviluppo F12, per esempio). Quindi questo non è qualcosa che protegge la tua applicazione, di per sé, ma qualcosa che rende la tua applicazione più user-friendly.
Devi decidere quanto è importante mantenere segrete le funzionalità di amministrazione. È un segreto che esiste una funzione di amministrazione che i tuoi utenti non possono usare? O hai solo bisogno di proteggere la funzionalità stessa? Se stai servendo file statici, un utente intelligente può ottenere uno qualsiasi di questi file dal server. Ma di che valore è? Questi file non conterranno dati effettivi e facendo clic sui pulsanti non verrà eseguito alcunché (perché hai protetto le tue chiamate API sul server). Tutto ciò che il nostro hacker può vedere è un modello html angolare. Questo non vale molto. Qualche aspirante ha speso tutta l'energia cercando di capire i nomi dei file da scaricare e tutti quelli che vede sono un mucchio di baffi e direttive ng- *. Whoopdedoo.
Ma se vuoi assicurarti anche questo, devi accedere ai file statici. Non c'è motivo per cui devi servire quelli liberamente. È possibile implementare la sicurezza sul server e controllare l'autorizzazione prima di restituire html e js. È un po 'più di lavoro da fare, quindi non ne vale la pena a meno che non sia necessario, ma è possibile.
Un ultimo pensiero: non c'è motivo per cui sei limitato a una singola app angolare per la tua applicazione. Potresti provare una configurazione simile a questa:
- Pagina di destinazione (rendering lato server, pubblico)
- Informazioni sulla pagina (rendering lato server, pubblico)
- Qualsiasi altra pagina sul lato server per commercializzare la tua app
- App (index.html, il punto di ingresso per la tua app angolare principale)
- App di amministrazione (index.html, il punto di accesso all'app angolare di amministrazione)
Qui ci sono due SPA che vengono servite dallo stesso server web. Questa struttura separa la tua funzionalità di amministrazione in modo pulito. Dal punto di vista della sicurezza, hai ancora tutte le stesse considerazioni, ma questo potrebbe rendere più semplice l'implementazione delle tue regole di sicurezza.