Come devo gestire l'autenticazione per una semplice app di chat per iPhone?
Backend
Sto costruendo il back-end usando due server di applicazioni:
-
Sinatra REST Server
Elenca utenti e amp; vecchi messaggi.
-
Node.js WebSocket Server
Invia e amp; riceve nuovi messaggi.
Proposta
-
Quando un utente si registra o effettua il login, il server REST restituisce un token di accesso.
-
L'app per iPhone passa quel token di accesso al server WebSocket alla connessione .
-
Il server WebSocket ricava l'ID utente dal token di accesso.
Pensieri
Voglio fare la minima quantità di lavoro che renderà l'app ragionevolmente sicura.
-
Autenticazione app iPhone: salva
cleint_secret
condivisa sull'app iPhone utilizzando Servizi portachiavi . Passaclient_secret
al server REST per la registrazione e amp; richieste di accesso. Ciò consente al server REST di verificare che tutte le richieste provengano dall'app iPhone e quindi impedire agli aggressori di registrarsi o accedere da altri client. Facebook autentica le app iOS utilizzando solo app & ID bundle. Sarebbe bello perché non avrei bisogno di creare unclient_secret
, ma non sono sicuro di come lo fanno. -
Generazione di token di accesso: Sarebbe bello se l'ID utente fosse in qualche modo crittografato nel token di accesso con una condivisione segreta tra REST & Server WebSocket. Quindi, il server WebSocket potrebbe utilizzare il segreto condiviso per verificare il token di accesso ed estrarre l'ID utente da esso. È possibile? In tal caso, che cos'è un algoritmo sicuro per ottenerlo? Penso di poterlo fare con HMAC , dove il messaggio è il ID utente. In tal caso, quale algoritmo HMAC dovrei usare? Ecco alcuni dei miei recenti pensieri su come generare un token di accesso . Qualcosa come HMAC sarebbe bello perché non avrei bisogno di memorizzare i token di accesso per ogni ID utente, ad esempio in un database Redis. Anche se forse è quello che dovrei fare. Perché ora che ci penso, se uso qualcosa come HMAC e il token di accesso di un utente viene rubato, come faccio a ripristinare quel token di accesso senza doverli resettare tutti?