Sto sviluppando un intero ecosistema con un provider OAuth2, un server di backend e un server frontend.
- Provider OAuth2: fornire solo l'autenticazione / l'autorizzazione per l'utente e alcuni altri servizi generici.
- Server di backend: implementa tutta la logica e i modelli per un contesto specifico ed è un client OAuth2. È registrato sul provider e ha tutto il diritto di utilizzare le sue API.
- Server frontend: esporre una GUI Web su Internet e ottenere tutti i dati dal server back-end.
A questo punto, il processo OAuth funziona correttamente e, dopo l'autorizzazione, il server Backend può ottenere dati utente dal provider.
Ma ho bisogno di mantenere la separazione dal frontend e dal backend e fornirò un servizio API RESTful accessibile solo dal frontend. Il mio problema è come farlo in modo corretto e sicuro.
Sto riscontrando qualche problema mentre sto cercando di rendere l'autenticazione dell'utente nel frontend utilizzando la sessione del provider OAuth e di fargli accedere ai suoi dati.
Questo è un requisito:
- il frontend deve accedere ai dati utente OAuth2 tramite l'API back-end.
- frontend e backend dovrebbero trovarsi su server diversi e potrebbero essere su host diversi.
- in futuro introdurrò più server che utilizzano il servizio OAuth.
qual è la migliore architettura per questo bisogno?
AGGIORNAMENTO 12/10/2016
La parte HTTPS è chiara, la userò sicuramente.
Conosco il flusso di OAuth2, ma non sono sicuro che l'esempio soddisfi le mie esigenze. Ecco un flusso davvero semplice di un caso d'uso reale. Supponiamo che l'utente abbia già effettuato l'accesso e abbia già autorizzato il "Server back-end" (C). UnarichiestaaBnellapaginadelprofilohtml,BhabisognodirecuperareleinformazioniAdaCusandol'APIREST.CèilclientOAuthedeveessereautorizzatodaAperleggereisuoidati.QuindiCchiedeaD(ilproviderOAuth)leinformazionietuttiidativengonorestituitiaB,chegeneralapaginadelprofilohtml.
Ilmiograndedubbio(eilmotivodiquestadomanda)èilseguente:CèunserverRoRchecontrollaselasessioneconl'utenteautenticatoèattivaprimadigestirelarichiesta.Maquandolarichiestaprovienedaunservernonc'ènessunasessionesullarichiesta,eancheseBspostaleintestazionisuC,Crespondeconunerrore,perchépuòvederechelasessioneè"chiara".
Il mio dubbio è che mi manca il modo corretto di gestire le comunicazioni B-C.