2013-05-25 61 views
2

我正在爲iOS開發,我需要使用API​​密鑰和祕密向某些API發出請求。但是,我不想讓它暴露在我的源代碼中,並且在推送到我的存儲庫時泄露了祕密。iOS應用中使用的API密鑰和機密 - 存儲它們的位置?

這種情況的最佳做法是什麼?寫在一個單獨的文件中,我將包含在.gitignore中?

感謝

回答

1

寫在一個單獨的文件,我會包括的.gitignore?

不,不要寫它永遠。
這意味着:

  • 你不寫你的回購(無需gitignore,或有關添加/提交/誤推OT擔心)
  • 你不寫它內的祕密(無需擔心您的計算機被盜用該「祕密」)

在您的回購中存儲能夠從外部來源尋求該祕密的腳本(來自git回購之外)並在內存中加載它
這與git credential-helper process類似,並且該腳本將啓動一個偵聽localhost:port的進程,以便在您僅在當前會話中需要時爲您提供「祕密」。
會話完成後,沒有剩餘痕跡。
這是管理祕密數據的最佳實踐。

可以自動觸發git checkout該腳本,如果你在一個.gitattributes文件中聲明它作爲一個內容過濾器:

content filter

+0

我沒有從做你的建議和寫在一個單獨的文件,我不會承諾(因爲它會在gitignore)的差異。 如果我按照你的建議做,我該如何檢索iOS應用程序中這些鍵的值(「在內存中」在這一點上有點模糊,不是?)。謝謝您的回答! – Renan

+0

@Ranan我編輯了我的答案以添加更多詳細信息。 – VonC

0

這是一個很古老的問題,但如果有人在谷歌看到了這個我建議你嘗試使用CloudKit來存儲任何應用程序的祕密(API密鑰,Oauth祕密)。只有您的應用可以訪問您的應用容器,Apple和您的應用之間的通信是安全的。 你可以看看here

+0

如果用戶關閉了iCloud,該怎麼辦?如果我們進入隧道並且網絡不可用,該怎麼辦? – matt

+0

用戶不需要啓用iCloud。您的應用程序公共數據庫始終可用。至於你的第二點,如果你使用這些密鑰來啓動網絡通話,它將會以任何方式失敗。每當您從服務器獲取密鑰鏈時,您都不必使用Keychain安全地存儲它,就不必調用CloudKit。關鍵是不要與應用程序一起發貨。 – derickito

+0

對不起,我的初步評論得到了切斷。我在上面回答。 – derickito

相關問題