Utilizza HMAC con un ID cliente.
Il client usa il loro "segreto" salt per firmare il messaggio e quindi inviare al server l'hash generato insieme al suo ID. Il server cerca ciò che il "segreto" dovrebbe essere basato sull'ID inviato dal client, rigenera l'hash con il segreto recuperato come sale. Se l'hash generato dal server corrisponde all'hash fornito dal client, la richiesta è legittima.
Non sono una persona ASP / .NET, quindi non posso fornire alcuna informazione su libs né approccio tecnico, ma ecco qualche pseudo codice:
client
var messageBody = 'POST PLAIN TEXT BODY';
var clientId = '12345';
var secret = 'abcdef';
var digest = createHash(messageBody,secret); // function createHash(string,salt)
var url = 'http://example.org/api?clientId='+clientId+'&hmac='+digest;
sendRequest(url,messageBody); // function sendRequest(url,postbody)
server
var messageBody = 'POST PLAIN TEXT BODY';
var clientId = '12345'; // from GET query
var hmac = '...'; // from GET query
var secret = lookupSecret(clientId);
var digest = createhash(messageBody,secret);
if ( hmac == digest ) {
// success, handle messageBody
} else {
// error
}
Considera l'utilizzo di un nonce per prevenire attacchi man-in-the-middle, se ciò ti preoccupa.