Предоставление учетных данных для веб-службы через ActiveResource - PullRequest
2 голосов
/ 26 марта 2012

Это моя первая попытка написать приложение на Rails для использования внешнего веб-сервиса.

Я провел некоторые базовые эксперименты по извлечению некоторых записей из другого приложения rails через ActiveResource, который работал довольно хорошо, но в этом случаеЯ пытаюсь получить доступ к стороннему веб-сервису, который требует очень специфической аутентификации, прежде чем я смогу что-либо сделать.

Рассматриваемый сервис - это REST API, предоставляемый DNSMadeEasy, документация для которого может быть расположена по адресу http://www.dnsmadeeasy.com/services/rest-api/

Требования аутентификации согласно документации следующие:

  • Создание строкового представления текущей даты и времени в формате HTTP.Пример: суббота, 12 февраля 2011 г. 20:59:04 GMT
  • Рассчитайте шестнадцатеричный HMAC SHA1-хеш этой строки, используя ваш секретный ключ в качестве ключа хеш-функции.
  • Установите значения для заголовков запросаиспользуя ваш ключ API, текущую дату и время и вычисленный вами хеш HMAC.

Итак, я выяснил, как получить дату и вычислить хеш:

request_date =Time.now.httpdate hmac = OpenSSL :: HMAC.hexdigest ('sha1', secret_key, request_date)

Итак, мой вопрос состоит из трех частей:

Во-первых, как мне потом вставить вставкуэта информация в заголовке HTTP, когда я отправляю свой запрос в веб-службу?

Во-вторых, как мне поместить все это в суперкласс, от которого наследуются мои классы ActiveResource, чтобы я неДолжны ли вы беспокоиться об этом в классах для Domain и ResourceRecord?

В-третьих, существует ли лучшая практика для хранения API и секретных ключей в вашем приложении, т.е. следует ли это делать с помощью инициализатора, или яЛучше всего использовать переменную окружения?

Любые советы и рекомендации для такого рода рабочих процессов будут чрезвычайно полезны.

Спасибо

1 Ответ

3 голосов
/ 26 марта 2012

1 - Вы можете установить заголовки, установив переменную экземпляра с именем @headers следующим образом:

class Base < ActiveResource::Base
 @headers = { ‘key’ => ‘value’ }
end

Взгляните на источник Активный ресурс: Заголовки

2 - Сделайте так, чтобы все ваши ресурсы наследовали от той базы, которую вы только что создали, вместо того, чтобы заставить их наследовать от ActiveResource :: Base.

3 - Я обычно помещаю эти ключи в файлы окружений илиЯ использую этот драгоценный камень SettingsLogic

...