2015-11-11 20 views
5

Sto imparando sull'autenticazione basata su token con Token Web JSON ed ecco come la vedo ora per un'app mobile, creata con, ad es. Swift:Autenticazione basata su token da un'app mobile

  1. posso creare un oggetto all'interno della applicazione utilizzando l'input dell'utente, come

    { nome utente: "PatrickBateman", password: "ismyknifesharp", ruolo: "regolare", . .. }

  2. Quindi posso generare un token JWT da esso con un library.

  3. Quindi lo invio a un endpoint API supportato, ad esempio /api/contacts/list. O devo inviare login/password così come sono per autenticarsi?
  4. Il server
  5. controlla in qualche modo la correttezza del token. Ma come? Questo token generato dal server dovrebbe essere salvato nel database e utilizzato come chiave? O devo generare il token sul server ogni volta che ottengo una richiesta dal client e la confronta con il token client?
  6. Ottieni e gestisci tutti i dati di cui ho bisogno.

Ecco le mie conclusioni:

  1. Non ho bisogno di inviare login coppia/password al server per autenticare l'utente.
  2. Ho bisogno di inviare token ogni volta che ho bisogno di ottenere dati di sola autenticazione.
  3. Dovrei implementare un algoritmo che modifichi il token generato a causa di alcuni fattori, come il passare del tempo, in modo da rendere i token più convenienti.
  4. Dovrei inviare il token all'interno delle intestazioni, ma non necessariamente, come si può fare all'interno del corpo delle richieste JSON.

Queste conclusioni sono corrette? Qual è il modo di controllare il token inviato dal cliente?

risposta

1

mie opinioni:

  1. Non dovrebbero tenere password dell'utente sul client. Il Cliente deve inserire la password sul server al momento della registrazione/accesso e non salvarlo da nessuna parte nel client. La richiesta deve essere https e la password non deve essere crittografata. Cifreremo la password più tardi sul lato server.

  2. Il server genererà un token per questo utente dopo il login dell'utente. token conterrà la data scaduta in sé. Useremo il token per autenticare l'autorizzazione con il server.

  3. Penso che ogni richiesta all'API dovrebbe fornire il token, ad eccezione delle richieste di iscrizione/accesso/dimenticata password.

  4. Il token deve essere inserito nell'intestazione della richiesta.

  5. Server dovrebbe consentire richiesta del cliente un nuovo token con il vecchio token (forse essere scaduto)

E la risposta per "Come server di controllare il token dal cliente?". Ci sono molti modi per farlo. La via che segue è il mio approccio attuale:

Il lato server genera un token, che è una stringa crittografata di user info (come token tempo scaduto, id utente, ruolo ... di utente) e una password (conservare solo sul server lato) con algoritmi HMAC o RSA. Quando l'utente invia un token, il server può decrittografare e ottenere il tempo user info, scaduto senza eseguire una query dal database.

In ogni caso, questa domanda non è correlata al tag Swift.

+0

Perché non è una buona idea mantenere la password e il nome utente sul lato client? In iOS possiamo memorizzarli in Keychain in modo sicuro giusto? – user805981

+0

Anche quando possiamo memorizzarli in modo sicuro, ma non ci sono benefici per questo. Non dovremmo usare la password memorizzata per riconnetterci. Il modo migliore è lavorare con il token o richiedere all'utente di fornire nuovamente la password tramite il modulo di accesso. – t4nhpt

+0

Vedo. E se dovessimo usare jwt e aggiornare i token. Dovremmo determinare se il jwt è scaduto dal lato client prima di inviare richieste http? O dovremmo lasciare scadere il jwt e restituire un 400 al client prima di entrare in un ciclo di aggiornamento? – user805981

Problemi correlati