Incluso un file client_secret OAuth in un'applicazione Java

8

Un file client_secret.json viene utilizzato nel flusso di autorizzazione OAuth 2.0 per l'API di Google Drive ( esempio ).

Se includo client_secret.json nella mia applicazione Java, accedere ai contenuti JAR è estremamente facile. Quindi, dovrei preoccuparmi? Non ho modo di rendere questo file "segreto".

Che errore si può fare con queste informazioni? Un utente finale deve concedere l'accesso alla mia applicazione per poter accedere ai suoi file di Google Drive.

Aggiornamento: Sembra che due casi possano essere analizzati.

  • Cosa si può fare solo con client_secret.json ?

Questa era l'intenzione della mia prima domanda. L'unica cosa che posso pensare è che se un utente collega il suo account alla mia app, può esaurire la mia quota gratuita per l'API di Drive (1.000.000.000 di richieste al giorno).

  • Qualcuno accede alle credenziali archiviate per un utente (file StoredCredential , nell'esempio) più client_secret.json .

Immagino che questo sia il caso peggiore, dal momento che "qualcuno" può agire come la mia app nell'account utente.

Aggiornamento 2: Documenti Google possono essere trovati qui: Uso di OAuth 2.0 per applicazioni installate

The client ID and client secret obtained from the Developers Console are embedded in the source code of your application. In this context, the client secret is obviously not treated as a secret.

    
posta IvanRF 05.11.2015 - 17:54
fonte

1 risposta

3

Non dovresti includere il segreto del client in un'applicazione javascript / desktop / mobile

Il motivo è che, come hai detto tu, è molto facile accedere. Non puoi proteggerlo se lo hai incorporato nella tua applicazione. Una volta che un utente malintenzionato trova il tuo cliente segreto, può ora impersonare il tuo cliente. Il segreto del client è pensato solo per essere incluso nei server web.

Usa flusso implicito OAuth2

OAuth2 Implicit Flow è stato progettato appositamente per risolvere questo problema. Nel flusso implicito, non vi è alcun segreto del client e una volta che un utente si autentica con il provider OAuth2, il client riceverà il token di accesso direttamente, quindi non è necessario un client secret.

link

Non utilizzare il flusso implicito per l'autenticazione

OAuth2 è stato creato per l'autorizzazione che non è uguale all'autenticazione. Se hai bisogno dell'autenticazione, dovrai guardare Open ID Connect che è stato costruito su OAuth2 per fornire tutte le parti mancanti necessarie per l'autenticazione sicura.

Informazioni sulla sicurezza

Sebbene sia consigliabile utilizzare il Flusso implicito quando si utilizza un client javascript / desktop / mobile, è soprattutto utile ridurre il numero di round necessari. Dal momento che non puoi proteggere il segreto del cliente, non c'è motivo di includerlo.

L'unico svantaggio di rimuovere il segreto del client (e il passaggio aggiuntivo ad esso collegato) è che il client non può sapere più se il token è stato emesso per lui poiché i token non sono associati a un client specifico. Questo porta a molteplici opportunità per gli attacchi di phishing come descritto qui:

link

    
risposta data 05.11.2015 - 19:38
fonte

Leggi altre domande sui tag