Ci sono 2 parti per l'autenticazione delle chiamate API REST. Quando un utente si registra con il tuo servizio, in genere assegnerai una CHIAVE che identifica quell'utente. A volte, questo è sufficiente. Ma questa CHIAVE può essere condivisa o rubata. In tal caso, il tuo servizio considererà la chiave ancora valida. Ora, al fine di prevenire i dirottamenti dei tasti ecc., Distribuirai anche una chiave segreta. Questa chiave non viene mai trasportata con la richiesta dell'API REST. Questa chiave viene utilizzata per eseguire un hash unidirezionale della richiesta API e creare una firma (HMAC).
Questa firma, oltre alla richiesta API (richiesta HTTP in forma di URL) viene poi inviato al server API. Il server esegue l'hash unidirezionale dell'URL e si confronta con la firma utilizzando la chiave privata di questo utente. Se corrispondono, è "assunto" che il richiedente abbia accesso alla chiave privata, e quindi la richiesta è valida.
Al fine di evitare gli attacchi di riproduzione, oltre a nonce (come suggerito dal poster precedente), si può anche utilizzare hash concatenamento.
Usi JAVA o PHP (o qualsiasi altra cosa)? – sp00m
lingua lato server è PHP – slash197
Come ha risposto @Laurent, è possibile dare un'occhiata al processo OAuth, ma proporrei l'OAuth2. Anche se il post è un po 'vecchio, troverai [qui] (http://stackoverflow.com/q/4875420/1225328) un'implementazione PHP di quel meccanismo. PS: Google e Facebook utilizzano entrambi OAuth2 per consentire agli sviluppatori di comunicare con le loro API. – sp00m