2012-10-03 10 views
11

Sto costruendo un'applicazione iOS e l'utente si autentica con il mio servizio web. Non voglio che effettuino il login ogni volta che l'app si avvia (il token dura un mese). Quindi mi piacerebbe mettere in cache questo sul dispositivo da qualche parte.Memorizzazione del token di autenticazione su iOS

Qual è il modo migliore per farlo in modo sicuro?

Posso semplicemente fare affidamento sull'app rimanendo sospesa e mantenendo il token in "memoria"?

+0

Si consiglia di osservare anche le linee guida OWASP - https://www.owasp.org/index.php/IOS_Developer_Cheat_Sheet – rajagp

risposta

15

2 opzioni

  • fare uso di NSUserdefault (negozio come l'accesso ingressi gettone o TextField [Ricordati di me opzione])
  • Accesso Portachiavi (consigliato) per fare il lavoro.

NSUserdefaults non è sicuro per la memorizzazione di tali valori credibili che è a scopo di autenticazione.Keychain d'altra parte è fatto per fare questo, sicuro e protetto.

7

Non si può contare sul fatto che iOS manterrà la tua applicazione per sempre nella memoria. Quindi, a un certo punto, devi salvare il token nella memoria permanente.

Vedere Keychain Service for iOS. Questo è il posto migliore dove archiviare cose come password, gettoni e altre chiavi.

+0

Ma cosa succede se le credenziali sono nel DB remoto e lui non vuole memorizzare quelle credenziali a livello locale? La necessità di usare Keychain comunque per salvare il token o qualcosa del genere? –

+1

No. Non è necessario memorizzare nulla in Keychain. Sta a te decidere dove archiviare qualsiasi segreto. Tuttavia, diciamo che memorizzi le credenziali nel DB remoto. Ora la domanda è: come si autentica la tua applicazione sul DB remoto? Se memorizzerà username/password hardcoded, chiunque potrà decompilare la tua app, ottenere username/password per il DB remoto e utilizzarla per ottenere credenziali reali. Quindi, alla fine sarà necessario memorizzare qualcosa sul dispositivo e il servizio Portachiavi è un modo comune e ragionevolmente sicuro di farlo. –

5

Non è possibile farlo in modo sicuro. Un token è di dominio pubblico e non appena è sul tuo dispositivo, un hacker potrebbe accedervi, indipendentemente da ciò che cerchi di proteggerlo. Inserirlo nel portachiavi non cambierà questo fatto. Anche se lo memorizzi lì, il che lo renderebbe sicuro mentre è lì dentro, possono semplicemente aspettare fino alla scadenza e poi afferrare il prossimo quando arriva il filo la prossima volta. I token di accesso non sono la cosa di cui ti devi preoccupare per la sicurezza, perché in effetti non puoi farlo in un ambiente mobile.

Ciò significa che è possibile memorizzarlo ovunque desideri. NSUserDefaults va bene, il portachiavi va bene, un database va bene, un file di testo nella directory dei documenti va bene. Tutti sono ugualmente sicuri perché un hacker determinato può semplicemente aspettare l'opportunità giusta per accedere ai dati che desidera. Dovresti invece preoccuparti di proteggere le credenziali di autenticazione dei tuoi utenti. Assicurati di archiviarli nel portachiavi e comunicare sempre e solo con la tua API su HTTPS a un server con un certificato SSL valido.

+6

Mentre sono d'accordo sul fatto che un dispositivo o una connessione compromessa rendano la maggior parte insicure, la sicurezza funziona principalmente rendendo molto difficile per un utente malintenzionato accedere alle informazioni o rompere qualcosa. Con questo in mente ha senso salvare le informazioni più sensibili in un ambiente sicuro (come il portachiavi iOS). Sicuramente un hacker determinato sarà probabilmente in grado di sconfiggerlo, ma uno meno determinato non lo farà e questa è una vittoria. – lm2s

Problemi correlati