heroku如何在其命令行应用程序中存储其身份验证?

heroku如何在其命令行应用程序中存储其身份验证?

问题描述:

我假设当你第一次安装heroku gem并提示你输入你的用户名/密码时,它会将该用户名/密码发送到它的服务器来验证。heroku如何在其命令行应用程序中存储其身份验证?

那么heroku(或其他任何命令行应用程序)如何将安全验证令牌安全地存储在文件系统中,然后在运行其他命令(如“heroku create”)时将它们一起传输以进行验证?

我在这里使用的是heroku作为例子,因为它是我能想到的唯一一个我现在想做的事情。

+0

看着auth.rb(以下fixlr的建议),我知道Heroku的不只是发送您的公共密钥的灰,还存储的API令牌。为什么他们有两种不同的身份验证形式。没有人足够吗? – 2012-02-05 02:51:38

现在的Heroku阐述了他们是如何存储Heroku的CLI的身份验证令牌在相当不错的细节在这里: https://devcenter.heroku.com/articles/authentication

相关摘录:

API令牌存储

Heroku的命令 - 在线工具在标准Unix 文件〜/ .netrc中存储API令牌。 netrc格式已经完善并且由unix上的各种网络工具支持得很好 。使用存储在 此文件中的Heroku凭证,其他工具(如curl)可以通过 很少或不需要额外的工作来访问Heroku API。

cd ~ 
ls .netrc 
ls: .netrc: No such file or directory 
$ heroku login 
Enter your Heroku credentials. 
Email: [email protected] 
Password: 
$ cat .netrc 
machine api.heroku.com 
    login [email protected] 
    password c4cd94da15ea0544802c2cfd5ec4ead324327430 
machine code.heroku.com 
    login [email protected] 
    password c4cd94da15ea0544802c2cfd5ec4ead324327430 
+1

下有正确的答案Heroku还发布了一个处理'.netrc'文件的rubygem:https://github.com/heroku/netrc – 2016-09-19 16:49:11

Heroku使用您的登录信息来确定您是谁,然后将您的公用ssh密钥发送到他们的服务器,因此当您推送到他们的git repo时,他们知道您是谁(docs)。

其他应用程序处理不同的事情。有些在您的主目录中创建一个包含API令牌的文件.<something>

这取决于实施。

这样做的一种常见方式是将自动生成的密钥对存储在临时文件中。公钥被传递给服务器,私钥用对称会话密钥加密(在短时间后或在注销时过期)。

此文件的权限字段设为r --------(仅由用户读出。)

/TMP通常使用,因为许多操作系统它清理干净周期性。 (有些甚至使用内存设备。)

实现可能会有所不同,例如,SSH密钥通常只生成一次,未使用会话密钥加密(但可能会过期),并存储在〜/ .ssh中。

该heroku宝石存储您的凭据〜/ .heroku /凭证和相关的代码是lib/heroku/auth.rb

+1

这不再正确,Taytay在 – 2015-04-07 18:46:35