Я пытаюсь проверить подпись почтового запроса, и пока хэш подписи не соответствует тестовому хэшу, который я генерирую с помощью моего API-интерфейса фляги.
В документах указан следующий код для проверки подписи в Ruby.
payload_body = request.body.read
signature = "sha1=" + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha1"), SECRET_TOKEN, payload_body)
Вот что я собрал во Flask/Python 3.6:
import hashlib, hmac
data=request.get_data()
key=SECRET_TOKEN.encode("utf-8"))
signature = "sha1=" + hmac.new(key, data, hashlib.sha1).hexdigest()
Со следующими данными:
СЕКРЕТ_ТОКЕН=""
request_data={"type": "verification_approved","data":{"level":"v1","user_id":"d6d782ef-568b-4355-8eb4-2d32ac97b44c"}}
Они получают:
Рубиновый хеш: "sha1=2e7c4e307e25dd0ce4baad4d90dc7d4b63bdbab6" # как указано в документации
я получаю:
Хэш Python: "sha1=b9361bca2a38228c741ef60296b468693752b76d" # моя реализация
Любая помощь/указатели будут очень признательны!
Официальный документ находится здесь: https://docs.developer.fractal.id/user-integration/webhooks/securing-webhooks и https://docs.developer.fractal.id/user-integration/webhooks/delivery
request.data
вместоrequest.get_data
. Возможно, это связано с тем, как JSON кодируется/добавляет escape-символы при преобразовании его в строку (что, очевидно, испортит полученный хэш). - person alexdlaird   schedule 19.05.2020