Sto cercando di capire come avere un'API WEB sicura e allo stesso tempo proteggere il client che accede all'API WEB. Spero che qualcuno possa indicarmi la giusta direzione.
Ecco il mio scenario. Ho sviluppato un'API WEB con un metodo di autenticazione che accetta nome utente / password e in caso di problemi di autenticazione di successo restituisce un JWT. Posso passarlo come intestazione personalizzata o cookie.
Ho un'applicazione client MVC che utilizza AngularJS. Uso $ http di AngularJS per effettuare chiamate all'API WEB per ottenere dati. Uso anche $ http per chiamare il metodo di autenticazione sull'API WEB e ottenere il token. Quello che ho difficoltà a capire è bloccare le viste / pagine specifiche nell'applicazione MVC. Voglio limitare queste pagine agli utenti autorizzati e alla fine basandomi sul loro ruolo.
Ecco le soluzioni a cui ho pensato, ma mi sembrano tutte problematiche.
- Non si utilizza MVC e si sta semplicemente eseguendo tutto quanto visualizzato / pagina in AngularJS. Ciò funzionerebbe sul lato client e non sarebbe sicuro. Gli utenti sarebbero in grado di visualizzare le pagine, solo con dati limitati / non disponibili.
- Uso di MVC per controllare la vista / le pagine che l'utente può visualizzare in base ai ruoli definiti nel JWT. Non so come passare il JWT che è stato rilasciato dall'API WEB al server. Poiché l'API WEB si trova su un dominio diverso, il cookie non verrà inviato quando si effettua una richiesta all'applicazione MVC. Anche se fosse stato inviato, avrei bisogno di un meccanismo di deserializzazione del JWT sul server che esegue l'applicazione MVC, cosa che non avrei. L'unica alternativa che ho visto sarebbe aggiungere un metodo all'API WEB che potrebbe restituire i ruoli dell'utente in base al JWT.
- Avere un metodo di autenticazione separato per l'applicazione MVC. Questo sembra semplicemente stupido.
- Avere sia l'API WEB che l'applicazione MVC nello stesso progetto / server. Questo unisce strettamente i due insieme. Voglio evitarlo.
Sono in perdita su come andare avanti con questo. È quello che voglio fare normale o è una soluzione stupida e dovrei cercare di fare qualcosa di diverso? E quindi? C'è qualche quadro là fuori che dovrei usare?