У меня есть приложение Rails, которое предоставляет JSON API, который используется скриптом Python.Безопасность важна, и я использую HMAC, чтобы сделать это.приложение rails и скрипт python знают секретный ключ, а подпись, которую они зашифровывают, - это URL-адрес и тело запроса.
Моя проблема в том, что подпись запроса не меняется каждыйвремя.Если он был перехвачен, злоумышленник может отправить точно такой же запрос с тем же дайджестом, и я думаю, что он будет аутентифицирован, хотя злоумышленник не знает секретный ключ.
Так что я думаю, что мне нужно что-то получитькак временная метка запроса, включенного в подпись - проблема в том, что я не знаю, как это сделать в python и ruby.
Это мой код python:
import hmac
import hashlib
import requests
fetch_path = url_base + '/phone_messages/pending'
fetch_body = '{}'
fetch_signature = fetch_path + ':' + fetch_body
fetch_hmac = hmac.new(api_key.encode('utf-8'), fetch_signature.encode('utf-8'), haslib.sha1).hexdigest()
а это мой рубиновый код:
signature = "#{request.url}:#{request.body.to_json.to_s}"
hmac_digest = OpenSSL::HMAC.hexdigest('sha1', secret_key, signature)