Sto costruendo un'API REST che riceverà richieste come:
GET /api/entities
GET /api/entities?filter=X&sort=Y
Questo sembra semplice: avere il client HMAC (percorso + query, chiave), mandarmi un identificatore chiave e HMAC in un'intestazione o qualcosa del genere, e poi faccio lo stesso sul server per vedere se corrispondono.
Ecco la mia preoccupazione:
POST /api/entities
{ "foo": "bar" }
Se il cliente calcola l'HMAC su quel percorso e fa una query, teoricamente HMAC potrebbe essere utilizzato per inviare qualsiasi corpo.
tl; dr Come si implementerebbe correttamente la firma delle richieste per richieste GET, POST, PUT che potrebbero o meno avere un corpo JSON?