Posso avere un'applicazione web solo client-side per conservare i token OAuth?

1

Sono solo uno studente, quindi perdonami se la mia comprensione è scarsa o le mie idee sono scarsamente espresse.

Voglio creare un'applicazione browser puramente client che funzioni con l'account Dropbox dell'utente. Vanno alla pagina, fanno clic su "Connect My Dropbox", concedono l'autorizzazione, recuperano il token di accesso e lo archiviano nella memoria locale. Quindi, l'applicazione effettuerà richieste direttamente all'API Dropbox per recuperare i contenuti di una determinata cartella e fare qualsiasi cosa: mostrare un editor Markdown per i loro file .md o creare una galleria per le loro immagini, o qualcosa del genere.

La mia comprensione del flusso di OAuth è la seguente:

  • Quando l'utente fa clic su "Collega il mio Dropbox", va ad es. dropbox.com/auth?clientID=foo
  • Se fanno clic su "consenti", Dropbox li reindirizza a ciò che ho specificato come URL di richiamata, con un codice di autorizzazione nella stringa di query
  • Quando viene avviata una richiesta dall'utente al mio endpoint URL di richiamata, prendo il codice di autorizzazione e inviamo una richiesta a dropbox.com/turn_auth_code_to_token?client_id=foo&client_secret=bar&auth_code=baz
  • Dropbox mi restituisce un token che posso utilizzare per effettuare richieste API.

Se la mia comprensione è corretta, non è possibile per me creare un'applicazione che utilizza OAuth e non ha componenti sul lato server, perché trasformare il codice di autenticazione in un token di accesso richiede la fornitura del segreto del client. Se inserisco il segreto del cliente nel codice di front-end, chiunque può semplicemente estrarlo e fare cose oscure travestite da me.

È giusto?

In caso affermativo: sono tenuto a implementare almeno un server che ascolta le richieste per il mio URI di callback e restituisce i token di accesso? E da lì, gli utenti possono archiviare i propri token di accesso localmente e utilizzarli?

    
posta GreenTriangle 20.04.2018 - 16:15
fonte

1 risposta

2

If my understanding is right, then it's not possible for me to make an application that uses OAuth and has no server-side component, because turning the auth code into an access token requires supplying the client secret. If I put the client secret in the front end code, anyone could just pull it out and do shady stuff disguised as me.

Is that right?

No, non hai ragione. Le specifiche OAuth descrivono diversi flussi - Flusso implicito tra di loro. In questo flusso non si utilizza il client secret poiché non è possibile garantire la memorizzazione sicura.

Implicit Grant (OAuth 2.0 spec https://tools.ietf.org/html/rfc6749)

The implicit grant type is used to obtain access tokens (it does not support the issuance of refresh tokens) and is optimized for public clients known to operate a particular redirection URI. These clients are typically implemented in a browser using a scripting language such as JavaScript.

Ovviamente questa soluzione include alcuni compromessi di sicurezza che sono descritti bene nelle specifiche. Come consiglio vivamente di leggere le specifiche di OAuth, ecco un link link con informazioni compresse su Flussi OAuth.

    
risposta data 21.04.2018 - 01:02
fonte

Leggi altre domande sui tag