通过ActiveResource向Web服务提供凭据

时间:2012-03-26 04:27:23

标签: ruby-on-rails activeresource

这是我第一次尝试编写Rails应用程序来使用外部Web服务。

我已经做了一些基本的实验,通过ActiveResource从另一个rails应用程序检索一些记录,效果很好,但在这个例子中,我试图访问第三方Web服务,这需要非常具体的身份验证才能做任何事情。

有问题的服务是由DNSMadeEasy提供的REST API,其文档位于http://www.dnsmadeeasy.com/services/rest-api/

根据文档的身份验证要求如下:

  • 以HTTP格式创建当前日期和时间的字符串表示形式。例: 2011年2月12日星期六20:59:04 GMT
  • 使用您的密钥作为哈希键计算该字符串的十六进制HMAC SHA1哈希值。
  • 使用您的API密钥,当前日期和时间以及您计算的HMAC哈希值设置请求标头的值。

所以我想出了如何获取日期并计算哈希值:

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

所以我的问题有三个部分:

首先,当我向Web服务发送请求时,如何在HTTP标头中插入此信息?

其次,我如何将所有这些放在我的ActiveResource类继承的超类中,以便我不必在Domain和ResourceRecord的类中担心它?

第三,是否有最佳实践在您的应用中存储API和密钥,即应该使用初始化程序,还是最好使用环境变量?

非常感谢此类工作流程的任何提示和技巧。

由于

1 个答案:

答案 0 :(得分:3)

1 - 您可以通过设置名为@headers的实例变量来设置标题,如下所示:

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

查看来源Active Resource: Headers

2 - 使您所有的资源继承自您刚刚创建的Base,而不是继承自ActiveResource :: Base。

3 - 我通常将这些密钥放在环境文件中,或者我使用此gem SettingsLogic