Ho bisogno di implementare rapidamente un sistema di autenticazione RESTful per la mia applicazione JavaScript da utilizzare. Penso di capire come dovrebbe funzionare, ma voglio solo ricontrollare. Ecco cosa sto pensando - cosa ne pensate voi ragazzi?
Schema del database
utenti
- id: intero
- first_name: varchar (50)
- last_name: varchar (50)
- password: varchar (32) (hash MD5)
- ecc.
user_authentications
- id: intero
- user_id: intero
- auth_token: varchar (32) (AES crittografato, con chiavi esterne al database)
- access_token: varchar (32) (AES crittografato, con chiavi esterne al database)
- attivo: booleano
Passi
Quanto segue succede su SSL. Sto usando Sinatra per l'API.
- JavaScript richiede l'autenticazione tramite POST a / users / auth / token.
- Il metodo / users / auth / token API genera un hash auth_token, crea un record in user_authentications e restituisce auth_token.
- JavaScript segna la password dell'utente e poi la salta con auth_token - SHA (access_token + MD5 (password))
- POST il nome utente e l'hash + password salata dell'utente in / users / auth / authenticate.
- Il metodo dell'API / users / auth / authenticate verificherà che SHA (AES.decrypt (access_token) + user.password) == ciò che è stato ricevuto tramite POST.
- Il / users / auth / authenticate genererà, AES cripterà, memorizzerà e restituirà un token di accesso se la verifica ha esito positivo; in caso contrario, restituirà 401 Non autorizzato.
- Per eventuali future richieste contro l'API, JavaScript includerà access_token e l'API troverà l'account utente basato su quello.