有考量到資訊安全的程式設計專案,通常都會要求機敏資訊,例如:連線字串、API 金鑰等等,不得直接簽入版控當中,等到應用程式要部署的時候,另外在正式環境中進行設定,這篇文章就來介紹如何在 IIS 上透過環境變數來覆寫 ASP.NET Core 網頁應用程式的組態設定。
實驗環境
我建立了一個 ASP.NET Core MVC 的網頁應用程式,有兩組設定檔 appsettings.json
、appsettings.Development.json
,設定檔的內容如下:
appsettings.json
{
"ConnectionStrings": {
"TestConnStr": "{SQL Server Connection String}"
},
"TestApiKey": "{Test Api Key}"
}
appsettings.Development.json
{
"ConnectionStrings": {
"TestConnStr": "Server=.\\SQLExpress;Database=Test;Integrated Security=true;TrustServerCertificate=True"
},
"TestApiKey": "88ce118e-c33d-4866-893b-3ada93c5befc"
}
我沒有建立 appsettings.Production.json
,因為我要在 IIS 上來用環境變數來進行組態設定。
在 IIS 上設定環境變數
我現在要在 IIS 上,透過環境變數設定 TestConnStr
及 TestApiKey
的值,我們直接點選部署在 IIS 上的網站,找到 Configuration Editor
這個功能。
點擊進去之後,找到 system.webServer/aspNetCore
這個區段。
然後,右邊的來源請選擇 ApplicationHost.config <location path='網站名稱' />
,這會將環境變數的設定值寫在本機的 applicationHost.config 裡面,如果是選擇 網站名稱 Web.config
則會寫在應用程式的 web.config 裡面,這有可能會隨著應用程式的更新,導致設定跑掉。
底下的 environmentVariables
就是設定環境變數的地方
點擊 ...
按鈕進入編輯畫面,按下 Add
就可以新增一個設定,如果是多階層的設定,比如 ConnectionStrings 底下的 TestConnStr,我們用雙底線 __
來表示階層關係。
編輯設定完成後,關閉編輯畫面,最後記得按下 Apply
就生效了。