2012-02-05 95 views
1

我假設當你第一次安裝heroku gem並提示你輸入你的用戶名/密碼時,它會將該用戶名/密碼發送到它的服務器來驗證。heroku如何在其命令行應用程序中存儲其身份驗證?

那麼heroku(或其他任何命令行應用程序)如何將安全驗證令牌安全地存儲在文件系統中,然後在運行其他命令(如「heroku create」)時將它們一起傳輸以進行驗證?

我在這裏使用的是heroku作爲例子,因爲它是我能想到的唯一一個我現在想做的事情。

+0

看着auth.rb(以下fixlr的建議),我知道Heroku的不只是發送您的公共密鑰的灰,還存儲的API令牌。爲什麼他們有兩種不同的身份驗證形式。沒有人足夠嗎? – 2012-02-05 02:51:38

回答

7

現在的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

2

Heroku使用您的登錄信息來確定您是誰,然後將您的公用ssh密鑰發送到他們的服務器,因此當您推送到他們的git repo時,他們知道您是誰(docs)。

其他應用程序處理不同的事情。有些在您的主目錄中創建一個包含API令牌的文件.<something>

0

這取決於實施。

這樣做的一種常見方式是將自動生成的密鑰對存儲在臨時文件中。公鑰被傳遞給服務器,私鑰用對稱會話密鑰加密(在短時間後或在註銷時過期)。

此文件的權限字段設爲r --------(僅由用戶讀出。)

/TMP通常使用,因爲許多操作系統它清理乾淨週期性。 (有些甚至使用內存設備。)

實現可能會有所不同,例如,SSH密鑰通常只生成一次,未使用會話密鑰加密(但可能會過期),並存儲在〜/ .ssh中。

2

該heroku寶石存儲您的憑據〜/ .heroku /憑證和相關的代碼是lib/heroku/auth.rb

+1

這不再正確,Taytay在 – 2015-04-07 18:46:35

相關問題