Может ли какой-нибудь хакер, имеющий доступ к сети, просто изменить тело HTTP без изменения атрибутов заголовка, которые являются частью подписи.
Да. Все, что не охвачено подписью, может быть изменено без обнаружения - разумеется, учитывая, что злоумышленник также может подорвать другие механизмы защиты целостности (TLS также обеспечивает это).
Если да тогда сообщение, полученное поставщиком услуг, не является тем, которое предназначено клиентом, не так ли?
Верно. Есть только одна поправка. Части сообщения, которые защищены целостностью, не могут быть изменены без обнаружения. Таким образом, хотя все сообщение может быть подделано, некоторые части могут быть неповрежденными и соответствовать оригиналу.
Итак, как этот способ подписания HTTP-запроса обеспечивает целостность сообщения?
Он обеспечивает целостность только тех частей, которые клиент выбирает для подписи. Чтобы обеспечить целостность полного сообщения, вам также необходимо проверить подписанные headers
и убедиться, что они охватывают все, что вы хотите обработать.
Если вы хотите узнать больше о схемах подписи и альтернативы, ознакомьтесь с постом, который я написал именно об этом: Руководство по аутентификации Web API, Схемы подписи .