Come impedire agli utenti di decompilare l'app per trovare la chiave API?

1

Attualmente sto costruendo un'app per Android che utilizza OAuth per accedere a un servizio. Con OAuth, ho bisogno di fornire un ID client e un client segreto al servizio in modo che possa identificare la mia app. In questo momento, sto memorizzando le credenziali in questo modo:

public class Creds {
    public static final String CLIENT_ID = "THE_CLIENT_ID";
    public static final String CLIENT_SECRET = "THE_CLIENT_SECRET";
}

Ovviamente, questo non è affatto sicuro. Chiunque può solo decompilare il file APK e vedere le stringhe all'istante. Come posso impedire alle persone di farlo?

Non considererei un offuscatore una soluzione accettabile, dal momento che chiunque compia uno sforzo sufficiente può ancora ricreare le stringhe.

nota: Questo non è un dupe di questa domanda in quanto discute come mantenere le stringhe fuori dal controllo del codice sorgente, non nascondendole all'interno del file APK. Ad esempio, un file di configurazione contenente le chiavi potrebbe essere tenuto fuori dal controllo del codice sorgente ma presente nell'APK decompilato.

modifica: Cosa succede se inserisco le stringhe nel codice nativo e le recupero tramite JNI? Il codice nativo è molto più difficile da decompilare.

    
posta James Ko 10.07.2017 - 23:23
fonte

1 risposta

10

Perché tiene il segreto? L'app non dovrebbe mai contenere il segreto.

Il tuo back-end (o il servizio di validazione che stai utilizzando) per l'esecuzione del round trip di autenticazione dovrebbe tenere il segreto e null'altro dovrebbe mai contenerlo. L'ID cliente deve essere disponibile per l'utente, è quello che usano per sapere per cosa sono in grado di autenticarsi, quindi è necessario che siano in grado di visualizzarlo.

Ancora una volta; il segreto è segreto e non dovresti mai dare ai tuoi utenti la possibilità di vederlo in anteprima. Se lo fai qualcuno può posare come te.

    
risposta data 10.07.2017 - 23:31
fonte

Leggi altre domande sui tag