È possibile utilizzare il parametro "state" di oauth2 per evitare l'uso di cookie di sessione per identificare l'utente

4

link afferma:

4.1.1. Authorization Request"

"state"

RECOMMENDED. An opaque value used by the client to maintain state between the request and callback. The authorization server includes this value when redirecting the user-agent back to the client. The parameter SHOULD be used for preventing cross-site request forgery as described in Section 10.12.

È sicuro utilizzare un parametro "stato" che generi ( uuid/v4 ) nella richiesta di autorizzazione OAuth2 oltre alla protezione CSRF per identificare l'utente nella callback del provider nel flusso di autorizzazione? In questo modo, il flusso di oauth2 è "stateless" e non richiede "sessioni appiccicose" per il bilanciamento del carico.

Attualmente, quando un utente avvia il flusso OAuth2 (visita la pagina di accesso) creo un auth-request-id e state unici per lui e lo memorizzo in Redis e inviamo il auth-request-id nei cookie.

Dopo che l'utente accede al provider (Google o Facebook) nella richiesta di callback, cerco di trovare la sessione dell'utente dal cookie auth-request-id in Redis e di convalidare se esiste una sessione e che il state ricevuto corrisponde al uno che ho inviato (contro gli attacchi CSRF).

Mi chiedo, posso saltare la creazione del cookie auth-request-id e identificare l'utente nella callback da state ? Data la logica, se non è possibile trovare state corrispondente in Redis, presume che lo stato non sia valido e che tutti i redis memorizzati state abbia una scadenza di 5 minuti.

    
posta Renārs Vilnis 19.10.2018 - 13:53
fonte

1 risposta

0

Credo che non puoi farlo in modo sicuro.

L'attore malintenzionato può liberamente ottenere reindirizzamenti usando la tua applicazione. Ora, se riesce a far si che una vittima ignara apra l'indirizzo di reindirizzamento, la vittima vedrà che la tua domanda sta chiedendo l'accesso. Se concede l'accesso, verrà reindirizzato a te, se utilizzi solo lo stato per identificarlo, hai appena assegnato le risorse delle vittime all'account degli attori malintenzionati nella tua app.

    
risposta data 19.10.2018 - 15:19
fonte

Leggi altre domande sui tag