Autorizza la comunicazione transitiva tra le applicazioni per conto dell'utente

4

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.
posta badoit 03.06.2018 - 09:39
fonte

1 risposta

0

Poiché (speravo) non sarei mai stato il primo a essere in questa situazione, sono riuscito a trovare diversi riferimenti sul web che parlano dei tipi di concessione "delega":

Questo è esattamente ciò di cui stavo parlando nella mia idea. Spero che questo possa aiutare altre persone nella stessa situazione.

    
risposta data 08.06.2018 - 21:35
fonte

Leggi altre domande sui tag