跨网站和gem客户端处理用户身份验证的最佳方式

时间:2008-12-03 22:44:45

标签: ruby authentication configuration settings

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

看起来像fiveruns_tuneup,getexceptional,New Relic和其他网站都有用户名和密码,但使用存储在./config/serviceName.yml中的API密钥。任何理由最好让API密钥与用户/密码相对config(他们是否使用密钥,因为密钥经常被检入SCM并在整个项目中使用,我们的密钥将不会被检入并且是按用户设置)

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

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

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

3 个答案:

答案 0 :(得分:1)

我建议您为网站帐户使用用户名/密码组合,并为任何网络服务使用API​​密钥。以下是此技术的优点:

  1. 通过将API密钥链接到帐户,您可以为同一个用户提供许多API密钥。也许这可以用于许多使用此数据服务的远程Web服务器,或执行独特的跟踪。
  2. 将API密钥附加到帐户还可以使用户的用户名和密码保持不变,因为API密钥不会包含它们。许多用户在许多服务上使用相同的用户名和密码,因此您正在帮助保护它们。
  3. 您可以限制对每个API密钥的部分功能的访问权限,但允许其用户名访问其帐户应有权访问的所有内容。此外,您甚至可以让他们限制API密钥的访问权限。
  4. 大多数主要服务(Yahoo!API,Flickr,Google API等)都使用用户名和密码登录网络帐户,以及集成点的API密钥。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

API密钥的问题在于,获取API密钥副本的任何人都可以执行授权。在项目中的某个位置存储API密钥会使用户共享密钥。如果要将公钥与用户关联,则可以基于每个用户向客户端授予权限,并且正确的密钥代理方法表明这些不会在任何地方存储在SCM中。

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