当您使用测试发布gem时,如何保护测试中的API密钥?

时间:2015-01-31 15:47:20

标签: ruby rubygems

我在测试中使用rspec,当我在github上发布我的gem时,我想保护我的API密钥。 这样做的最佳做法是什么?我应该使用VCR然后从git日志中删除我的密钥吗?

1 个答案:

答案 0 :(得分:1)

从广义上讲,以下是我过去在类似情况下使用过的三种方法。您选择的将取决于您的具体情况。

  • 测试用户提供API密钥

如果您的测试套件需要或至少更喜欢使用实际API密钥的实际API调用,则可以让测试调用者在运行测试时提供凭据。

两种最常见的方法是:

  • 项目中具有已知名称但未检入版本控制的文件。在调用测试套件之前,请包含一个带有伪凭证的示例,该示例会被检入版本控制,以及用户在真实文件中提供真实凭据的说明。
  • 从环境变量中读取。在调用测试套件之前,包括用户设置适当环境变量的说明。

否则,

  • 模拟API

这可以是您描述的VCR方法。这也可能是修补API调用以返回一些假结果。

  • 测试与API交互分开的特定于域的代码

假设API和API客户端的行为与预期相符。然后,分解构造API输入的代码部分并处理API输出。测试生成的输入的属性。测试具有已知或假输出的输出处理器的行为。

最后,警告:

如果您曾将API密钥提交给版本控制,则会在历史记录中显示。如果您曾经推送到公共托管服务,它将被暴露在互联网上,最值得注意的是,它将暴露给专门的机器人,这些机器人会抓取新推送的敏感凭证提交。如果是您,请立即更改您的凭据!

我目前无法找到原始博文,但至少有一篇报道称某人不小心将其AWS凭据推送到GitHub。他们随后醒来了几千美元的钞票。