0

以下面的案例爲例。在客戶端 - 服務器構建之間共享祕密的好策略

您已經使用OAuth2保護了RESTful API層。另一方面,爲了讓用戶對您的API進行身份驗證,您需要請求訪問令牌(即grant_type=password)。

爲了請求密碼訪問令牌,客戶端應用程序需要一個OAuth客戶端(密鑰+密鑰對)。

現在您已配置好所有使用持續集成連續部署

在發展建立,在構建腳本創建的測試數據,包括OAuth用戶端。顯然,如果構建創建測試數據,則它先前會刪除自動測試期間創建的所有數據。

所以你希望你的客戶端應用程序使用的OAuth用戶端之一,你想避免硬編碼其中之一,因爲他們使用的API的基礎設施創建的,所以他們從頭開始重新創建上每個版本。

認爲前端和後端是由不同的構建腳本構建的。

結論&問題

什麼是共享服務器和客戶端架構之間的祕密,所以無論起牀,用相同的安全機密運行同步的好辦法?

一些想法

  1. 操作系統的環境變量。我可以將這些祕密存儲在構建機器環境變量中。也就是說,客戶端基礎架構將始終以最新的祕密進行構建和部署。

  2. 與#1相同,但將這些機密存儲在生成機器的共享目錄中。

回答

0

最後,我用公共構建目錄結束了存儲具有最新憑證的JSON文件的方法,其中兩個構建都可以訪問它。每個後端構建運行都會保留包含完整憑據的JSON文件,並且前端構建依賴於整個文件。

無論如何,我嘗試了環境變量的方法,但由於兩個構建都在相同的TFS構建代理上運行,因此客戶端構建無法看到環境變量的更改,除非重新啓動整個代理服務。

0

關於TFS/VSTS建(TFS 2015年或更高版本)/釋放(TFS 2017年或VSTS)系統,你只需要檢查允許腳本訪問OAuth令牌選項中選擇生成定義或發佈/常規選項卡環境,那麼您可以通過在每個任務中使用$(System.AccessToekn)來獲取Access OAuth令牌。

enter image description here

enter image description here

關於其它系統中,更好的方法是存儲在系統環境變量訪問令牌,並在結束時,其類似於用於其它版本所共享變量值中移除/通過在TFS或VSTS中使用"##vso[task.setvariable variable=testvar;]testvalue"(PowerShell)發佈任務。

另一方面,您可以在系統環境中存儲加密的訪問令牌的安全性,然後解密並使用它。

+0

嘿,謝謝你的努力。看起來你答案的第一部分根本不回答我的問題。我沒有試圖共享TFS訪問令牌,而是分享我自己的基礎架構所需的不記名令牌。另一方面,我正在嘗試環境變量的方法,但是我的工作並不完善,因爲既然客戶端應用程序和後端都在同一個構建代理上工作,那麼在重新啓動代理之前,我無法看到updatedenvironment變量服務...所以我結束了序列化這些憑據到JSON,然後我將文件存儲在一個共同的已知位置 –

+0

@MatíasFidemraizer將令牌序列化爲JSON是好的,您可以發佈答案。 –

+0

我明白了。我已經添加了它。無論如何,我感謝你的努力! –

相關問題