2

我们正在开发一项服务,该服务可以访问网站以获取统计信息和其他任务,但大部分使用将通过客户端 gem 和 rake 任务。处理这两个部分的身份验证的最佳方法是什么。

看起来 Fiveruns_tuneup、getexceptional、New Relic 和其他网站都有用户名和密码,但使用存储在 ./config/serviceName.yml 中的 API 密钥任何原因最好在配置中使用与用户/密码相反的 API 密钥(做他们使用密钥是因为密钥通常被检入 SCM 并在整个项目中使用,而我们的密钥不会被检入并且将是每个用户的设置)

GitHub 已将您的公钥放在 github 服务器上并使用它,但我认为 git 默认支持公钥/私钥。

最好保留一个 ./config/serviceName.yml 还是因为我们必须创建一个包含其他信息的子目录有 ./serviceName/config.yml?(不存储在 SCM 中的每个用户是否意味着最好将其全部保存在一个排除目录中?)

只是在开始实施之前寻找一些关于最佳实践的想法和想法。

4

3 回答 3

1

I recommend that you use username/password combos for website accounts, and API keys for any web services. Here are the advantages of this technique:

  1. By linking API keys to an account, you could have many API keys for the same user. Perhaps this could be used for many remote web servers that consume this data service, or to perform unique tracking.
  2. Attaching API keys to an account also lets you keep the user's username and password uncompromised since an API key will not contain them. Many users use the same username and password on many services, so you are helping to protect them.
  3. You could limit access to portions of functionality for each API key, but give their username access to everything their account should have access to. Additionally, you can even give them the ability to limit how much access an API key might have.

Most of the major services (Yahoo! API, Flickr, Google API, etc) use accounts with a username and password to login to the web account, and API keys for integration points.

于 2008-12-09T05:08:17.227 回答
1

当您可以提供帮助时,切勿使用用户/通行证。安全问题太可怕了。如果用户/密码泄露,您必须更改密码,否则他们可以访问您的整个帐户。

API 密钥更好,因为它们更容易更改,并且可以仅限于您需要使用 API 访问的部分(即,如果有人有您的密码,他们可以更改您的密码。如果他们只有 API,他们就不能钥匙)。

每个客户端使用不同的 API 密钥或安全令牌交换(例如 OAuth)是最好的解决方案,如果您在 API 上拥有的不仅仅是您的客户端。

于 2008-12-11T15:12:38.363 回答
0

github 方法是在现有 git 实践的基础上进行引导,但这不是一个坏主意,因为大概每个用户都有自己的私钥来匹配中央机构中已发布的公共密钥。由于密钥代理已经提供了一种安全身份验证的方法,这似乎是一种非常安全的方法。公钥/私钥是一种经过深思熟虑的身份验证方案,不幸的是,它已被多次改造,但成功有限。

API 密钥的问题在于,任何获得 API 密钥副本的人都可以做任何授权的事情。将 API 密钥存储在项目中的某处会请求用户共享密钥。如果您将公钥与用户相关联,则可以基于每个用户向客户端授予权限,并且适当的密钥代理方法建议这些不会存储在任何地方的 SCM 中。

我不确定我是否遵循 config/serviceName.yml 或 serviceName/config.yml 之间的区别。如果您将公钥/私钥作为客户端的身份验证方法,这似乎并不相关。

于 2008-12-08T22:33:17.600 回答