Il modo migliore per implementare l'autenticazione per un'API REST

20

Sviluppiamo applicazioni basate su social per dispositivi mobili. Ogni applicazione consuma servizi web API RESTful. Quando eseguo l'accesso, di solito memorizzo il nome utente e la password da qualche parte sul dispositivo. Poi li mando e come risposta ottengo l'accesso al mio profilo. Ma so anche che c'è un altro modo per farlo.

Uno in qualche modo genera un token con un particolare algoritmo, quindi lo invia al posto del nome utente e della password per ottenere l'accesso.

Come dovrei implementarlo? Dovrei inviare questo token insieme ad ogni altra richiesta rispetto al login?

    
posta Vladimir Stazhilov 15.01.2013 - 13:30
fonte

2 risposte

13

Ci sono diversi modi per implementare l'autenticazione nel contesto RESTful, ed è più sicuro inviare solo token invece di login / password: potresti facilmente rendere i token non validi entro il timeout o da alcuni altri criteri e chiedi all'utente di eseguire nuovamente l'autenticazione.

Ad esempio richieste REST di autenticazione utilizzando HMAC . Con questo approccio, il cliente avrà public e chiavi segrete . A tutte le richieste che richiedono autenticazione , devi aggiungere chiave pubblica e usare chiave segreta per calcolare l'hash della tua richiesta

var myRequest = "https://myserver/resource?publicId=12345&param=value";
var requestHash = hmac_implementation(myRequest);
myRequest = myRequest + '&hmac=' + requestHash;

Ora il server potrebbe identificare la richiesta con chiave pubblica e calcolare requestHash stesso. Se entrambi gli hash sono uguali, l'utente è autorizzato.

Btw, devi anche usare https per proteggere la comunicazione su una rete di computer - questo ridurrà drasticamente il numero di possibili problemi.

    
risposta data 15.01.2013 - 14:12
fonte
8

oAuth è lo standard per questo ma ci sono più soluzioni.

Non cercare di implementare sicurezza, token, ecc. tutto da solo, poiché si tratta di un argomento difficile e rischioso. Prendi ad esempio un'occhiata qui:

link

    
risposta data 15.01.2013 - 13:49
fonte

Leggi altre domande sui tag