當開發時,會使用到各種密鑰
不管是App Secret, API Key還是DB的Connection String
該如何的安全保存這些資料呢並且上傳至線上版控如GitHub等
就來使用User Secret吧
----
又是一個休假的日子
於是就來寫個閱讀心得當個以後開發筆記用
正文開始
-----
這次在ASP.NET Core Intermediate的課程中
提到了許多環境變數的設置方式
但現在的開發人員通常會把自己的專案放到GitHub等線上版控系統中
如果又是公開或者作者想開源的狀況下
很容易忘記把自己的一些私鑰或者API KEY藏好,就很歡樂的放上去了(灑花
於是就#只要出問題推給駭客入侵就對了(YA~
當然這也是資安的一部分(然後就想著台灣一般民眾的資安觀念.....淚....
以下以一個ASP.NET Core包含DB存取的專案在"開發階段"做介紹
在Visual Studio開發環境下
在專案啟動載入Startup.cs檔時ConfigureServices將會載入DB的連線字串
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
而DB的連線字串內容會放在appsettings.json檔案裡
環境變數的部分會放置於
專案(Project)->"專案名稱"屬性裡的偵錯頁籤裡
當然也可以把連線字串寫在專案屬性裡
如果我們在專案屬性新增連線字串在環境變數,並於Index.cshtml
利用Dependency injection的方式於頁面顯示連線字串
@page
@inject Microsoft.Extensions.Configuration.IConfiguration Configuration
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<h1>This is my ConnectionString: @Configuration["ConnectionStrings:DefaultConnection"]</h1>
可發現偵錯下連線字串已改為由環境變數複寫
當然在這樣的狀況下,把整個專案丟到GitHub上,詳細的內容整個pull下來還是如同明文一樣,只是放在隱藏處而已
那該如何在開發時"安全"的藏好密鑰並且能上傳至GitHub並公開給大家呢?
以下就在"開發階段"使用Visual Studio 2017開發ASP.NET Core專案如何使用User Secret保存密鑰
----
以Visual Studio 2017開發環境下
在專案名稱上點選右鍵->Manage User Secrets
此時會看到一個secrets.json檔被建立起來,但在專案總覽裡面看不到此檔案名稱
並且專案的csproj檔會新增兩個屬性
於<PropertyGroup>新增了<UserSecretsId>
<UserSecretsId>產生了本專案的GUID
而在<ItemGroup>則是載入了Microsoft.Extensions.SecretManager.Tools套件
接著在secrets.json新增連線字串
注意!!!若專案屬性裡有相同變數名稱將會以專案屬性裡的變數蓋過
啟動偵錯後將會看到連線字串是由secrets.json所定義
但為何這樣就可以避免別人竊取機密了呢
因為secrets.json根本沒在專案資料夾裡(笑~
secrets.json檔案位置在
windows:%APPDATA%\microsoft\UserSecrets\
Linux, Mac OS: ~/.microsoft/usersecrets/
所以當使用版控時,並未包含在裡面,當然就偷不了
當上傳至Azure後也可以發現因為沒有secrets.json檔
因轉而使用原本的appsetting.json檔裡的預設字串
那該如何新增私鑰變數於使Azure App Service存取呢?
於App Services裡Settings裡的Application settings管理
當然如果有其他變數的話就放在Application settings
此時就可以看到整個App Service抓到的是由Application settings所定義的內容了
----
以Visual Studio Code開發ASP.NET Core專案使用User Secret
----
參考資料:
Safe storage of app secrets in development in ASP.NET Core
Managing Secrets in .NET CORE 2.0 Apps
ASP.NET Core - Intermediate(MVA 影片)
- 文章中的敘述或資訊有誤,歡迎回應指正,討論與指教是進步的原動力:)
- 若喜歡此點部落文章,歡迎各位轉載並於文末附載原文網址超連結與站名【DriftMind】