我们正在开发一种服务,可以访问统计信息和其他任务的网站访问权限,但大部分用途都是通过客户端gem和rake任务。处理两个部分的身份验证的最佳方法是什么。
看起来像fiveruns_tuneup,getexceptional,New Relic和其他网站都有用户名和密码,但使用存储在./config/serviceName.yml中的API密钥。任何理由最好让API密钥与用户/密码相对config(他们是否使用密钥,因为密钥经常被检入SCM并在整个项目中使用,我们的密钥将不会被检入并且是按用户设置)
GitHub让你把你的公钥放在github服务器上并使用它,但我认为git默认支持公钥/私钥。
是否首选保留./config/serviceName.yml或者因为我们必须创建一个包含其他信息的子目录./serviceName/config.yml? (每个用户,没有存储在SCM中是否意味着最好将它全部保存在一个被排除的目录中?)
在开始实施之前,只需寻找有关最佳实践的一些想法和想法。
答案 0 :(得分:1)
我建议您为网站帐户使用用户名/密码组合,并为任何网络服务使用API密钥。以下是此技术的优点:
大多数主要服务(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之间的区别。如果您将公钥/私钥作为客户端的身份验证方法,那似乎并不相关。