Воссоздание post-запроса post от postman в HTTParty с подписью AWS

#ruby-on-rails #ruby #amazon-web-services #httparty

#ruby-on-rails #ruby #amazon-веб-сервисы #httparty

Вопрос:

У меня есть пользовательский API, который должен передавать ключ доступа AWS, секретный ключ и регион. Я могу генерировать результаты из post-запросов в Postman, когда я помещаю эти учетные данные в заголовки авторизации под типом подписи AWS. Но я не уверен, что правильный синтаксис для передачи HTTParty в ruby.

Это мое текущее выражение запроса:

 response = HTTParty.post(BASE_URL, :body => data.to_json, :headers => {'Content-Type' => 'application/json'})
  

Все примеры, которые я вижу, — это передача авторизации в токене. Но в postman я передаю ключ доступа, секретный ключ и регион. Нужно ли мне генерировать токен перед этим? Если да, то как?

Комментарии:

1. У Postman есть функция для представления вашего запроса в коде Ruby с помощью Net::HTTP. Я рекомендую опубликовать приведенный в нем пример. (с отредактированной конфиденциальной информацией) Таким образом, этот вопрос становится более узким. (затем задача состоит в том, чтобы преобразовать вызов Net :: HTTP в вызов HTTParty, который должен быть простым для большинства Rubyists и не требовать специальных знаний AWS)

2. Я нашел фрагмент кода, но подпись уже сгенерирована. Я ищу шаг для создания подписи.

3. Можете ли вы поделиться дополнительной информацией о том, как это делается в Postman? Шаги для воспроизведения, скриншот (при необходимости) и т. Д. Рад взглянуть на это, но начинать с нуля мне было бы сложно.

4. Я не уверен, как это делается в Postman. Кажется, есть средний шаг между отправкой учетных данных AWS и подписью. Похоже, это происходит автоматически. Но я пытаюсь выяснить средний шаг создания этой подписи.

5. Извините, я должен был быть более ясным. Я имел в виду объяснение того, как вы настраиваете запрос в postman, а не того, как postman фактически генерирует подпись. Таким образом, я могу воспроизвести вашу настройку и структуру запроса.

Ответ №1:

Для этого у AWS есть ruby gem, aws-sigv4 (предполагая, что это версия, которая вам нужна в вашем случае, перепроверьте), которая позволяет вам передавать свои учетные данные, регион и запрос на создание подписи. Он возвращает хэш заголовков, которые действуют как его подпись, которую вы можете передать в HTTParty с остальными деталями запроса.

https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Sigv4/Signer.html