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


21

Sviluppiamo applicazioni basate su social per dispositivi mobili. Ogni applicazione utilizza servizi Web API RESTful. Quando eseguo l'accesso, di solito memorizzo il nome utente e la password da qualche parte sul dispositivo. Quindi li invio 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 algoritmo particolare e quindi lo invia invece del nome utente e della password per ottenere l'accesso.

Come dovrei implementarlo? Devo inviare questo token insieme ad ogni altra richiesta oltre al login?


11
Questa è autenticazione , non autorizzazione . Autenticazione = prova che sei quello che dici di essere. Autorizzazione = prova che ti è permesso fare quello che hai richiesto.
martedì

Stavo per aggiungere lo stesso commento alle risposte! +1 a te @tdammers Ho modificato tutti i contenuti, quindi l'autorizzazione a
cercare su Google

Risposte:


14

Esistono diversi modi per implementare l' autenticazione nel contesto RESTful ed è più sicuro inviare solo token invece di login / password: è possibile rendere i token non validi per timeout o secondo altri criteri e chiedere all'utente di riautenticare .

Ad esempio, le richieste REST di autenticazione tramite HMAC . In questo approccio, il client avrà chiavi pubbliche e segrete . A tutte le richieste che richiedono l' autenticazione , è necessario aggiungere la chiave pubblica e utilizzare la chiave segreta per calcolare l'hash della 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.

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.