È una soluzione sicura per l'autenticazione RESTful?

1

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.

  1. JavaScript richiede l'autenticazione tramite POST a / users / auth / token.
  2. Il metodo / users / auth / token API genera un hash auth_token, crea un record in user_authentications e restituisce auth_token.
  3. JavaScript segna la password dell'utente e poi la salta con auth_token - SHA (access_token + MD5 (password))
  4. POST il nome utente e l'hash + password salata dell'utente in / users / auth / authenticate.
  5. Il metodo dell'API / users / auth / authenticate verificherà che SHA (AES.decrypt (access_token) + user.password) == ciò che è stato ricevuto tramite POST.
  6. 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.
  7. Per eventuali future richieste contro l'API, JavaScript includerà access_token e l'API troverà l'account utente basato su quello.
posta Chad Johnson 28.10.2013 - 19:20
fonte

2 risposte

3

No, non è sicuro , e sembra complesso non necessario.

In particolare:

  • Nessun motivo per crittografare i token a livello di database. Se un utente malintenzionato può ottenere l'hash della password (ha accesso al DB), può ottenere token nuovi di zecca.
  • Nessuna scadenza di sessione descritta.

Questo può aiutare: OWASP Scheda Trucchi sulla sicurezza REST , Foglio di trucco dell'autenticità

    
risposta data 18.10.2014 - 23:40
fonte
-1

Come ha detto Donal Fellows, questo è solo uno spreco di tempo. Se non hai un canale sicuro, dovresti prenderne uno invece di reinventare la ruota. Se hai già un canale sicuro, non hai bisogno di un altro (inferiore) meccanismo di crittografia ...

    
risposta data 18.09.2014 - 16:35
fonte

Leggi altre domande sui tag