Sto cercando di capire da un po 'di tempo la questione della sicurezza web. Supponiamo di avere un sistema configurato come illustrato nella figura seguente.
Esisteun'unicaapplicazioneprincipaleconcuil'utenteinteragiscelamaggiorpartedeltempoattraversounfront-end.Oltreall'applicazioneprincipale,cisonopiùapplicazionipiùpiccole.Questeapplicazionihannoanchefront-endconcuil'utentepuòinteragire.Datochenonvogliamoavereundatabaseutentediversoperciascunadiquesteapplicazioni,abbiamodecisodiutilizzareoAuth2perl'autenticazione.
L'applicazioneprincipalepuòinteragireconquestialtrisistemieviceversa.Lamaggiorpartedellevolteènelcontestodiun'interazioneconl'utente.
Larichiestadall'applicazioneprincipaleadun'altraapplicazionedeveessere(1)autorizzatae(2)vorremmosaperein"altra applicazione" per conto di quale utente è stata avviata la chiamata (non "Applicazione principale", ma "Utente").
È davvero allettante inviare il token utente oAuth dall'applicazione principale ad un'altra applicazione. Ma questo potrebbe avere serie implicazioni sulla sicurezza poiché "altre applicazioni" avrebbero ora tutti i diritti dell'utente di moderare con l'applicazione principale ( link ).
Questo potrebbe non essere poi così male, dato che stiamo gestendo questi servizi da soli, ma questo non è certamente l'approccio giusto nel caso in cui abbiamo a che fare con applicazioni di terze parti.
In sintesi, la mia domanda è: se l'utente avvia una richiesta su un'applicazione, che a sua volta deve chiamare un'altra applicazione per completare la richiesta, come possiamo:
- Autorizza questa seconda chiamata dall'applicazione ad un'altra applicazione (dato che l'utente è autorizzato e disponiamo di un sistema di autenticazione oAuth centrale)
- E ancora in qualche modo sapere a nome di quale utente è stata avviata la chiamata.
Idealmente, il destinatario della chiamata non saprebbe nemmeno che la chiamata è stata avviata dall'altra applicazione (si direbbe semplicemente che è una chiamata diretta da un utente). Utilizzerebbe semplicemente gli intercettori di sicurezza oAuth già in essere.
Modifica
Un pensiero che ho è di aggiungere qualche tipo di concessione di autorizzazione aggiuntiva al server di autorizzazione che prende come input:
- credenziali del proprietario delle risorse valide
- un token valido dell'utente che ha avviato la richiesta
- l'id del server delle risorse a cui accediamo
Il server di autorizzazione sa, date le credenziali del proprietario della risorsa richiedente:
- quali ID del server delle risorse sono consentiti
- quali permessi possono essere mantenuti dal token originale
Il server di autorizzazione:
- convalida le credenziali del server delle risorse richiedenti
- convalida il token utente
- convalida se il server delle risorse richiedente è autorizzato a richiedere un token per il server delle risorse richiesto
- conserva intersezione dell'autorizzazione utente sui token utente e le autorizzazioni utente consentite per il server delle risorse richiedente
Il risultato è un token di breve durata (non aggiornabile)
- per conto dell'utente richiedente
- avendo solo l'id del server delle risorse accederai come pubblico
- con un sottoinsieme di permessi del token originale.