91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.NET Core程序中使用User Secrets存儲敏感數據

發布時間:2020-07-24 15:11:30 來源:網絡 閱讀:482 作者:xmgdc 欄目:編程語言

前言

在開發中經常會用到一些敏感數據比如AppSecret或數據庫連接字符串無論是硬編碼還是寫在配置文件中最終都要push到svn或git上。對于開源項目這些敏感數據就無隱私可言了對于私有項目一旦源代碼管理服務器被黑這些敏感數據也將暴露無遺。所以最佳實踐就是不要將敏感數據寫到源代碼中。

以往我們常常將數據庫連接字符串寫在web.config中.NET Core中寫在appsettings.json中開發環境下如果一個開發者修改了連接字符串為了不影響其他開發者每次提交代碼的時候就應該忽略該配置文件如果還添加了其他配置必須提交的話要么先撤銷連接字符串的修改再提交要么直接提交會影響其他開發人員。很多時候我們就是直接提交了大不了其他開發者pull下來代碼再修改一下。但是最佳實踐就是不要寫在配置文件中。

注意上面提到的問題都是在開發環境下。

Secret Manager

.NET Core中為我們提供了叫Secret Manager的工具可以實現上文中的最佳實踐再次強調一次Secret Manager只適用于開發環境中。

下面說一下Secret Manager它幫我們抽象了一些細節比如數據存儲在哪以及如何存儲的問題。簡單來說它幫助我們將數據以明文的形式存在了本地的一個json文件中。系統不同存儲的位置也不一樣。

Windows

%APPDATA%\microsoft\UserSecrets\<userSecretsId>\secrets.json

Linux

~/.microsoft/usersecrets/<userSecretsId>/secrets.json

Mac

~/.microsoft/usersecrets/<userSecretsId>/secrets.json

userSecretsId是在.csproj文件中指定的會在下文講到。

安裝、使用

配置User Secrets及訪問需要用到兩個包分別為

Microsoft.Extensions.SecretManager.Tools
Microsoft.Extensions.Configuration.UserSecrets

簡單說一下兩者的作用第一個是工具包可以使用dotnet user-secrets命令將數據存儲到json文件中第二個包可以通過.NET Core的配置系統訪問存儲在json文件中的數據。

dotnet user-secrets -h

這個命令可以查看Secret Manager的用法。

它有4個命令

命令描述語法
clear刪除程序中所有的secretsdotnet user-secrets clear
list列舉程序中所有的secretsdotnet user-secrets list
remove刪除指定的secretdotnet user-secrets remove NameOfSecret
set設置secretdotnet user-secrets set NameOfSecret ValueOfSecret

以Mac上舉例上面的命令都是操作~/.microsoft/usersecrets/\/secrets.json這個文件userSecretsId指定了是哪個項目的secrets。

userSecretsId在.csproj文件中指定。

<PropertyGroup>
  <UserSecretsId>userSecretsId的值</UserSecretsId>
</PropertyGroup>

在mac或linux上userSecretsId的值可以通過uuidgen生成。

在Microsoft.Extensions.Configuration.UserSecrets包擴展了ConfigurationBuilder包含一個AddUserSecrets的擴展方法。如果想通過Configuration訪問User Secrets只需要在調用build.AddUserSecrets()即可。

if (env.IsDevelopment())
{
    // 搜索包含類型Startup的程序集添加User Secrets的配置源Startup也可以換成其他程序集中的其他類型
    builder.AddUserSecrets<Startup>();
}

或干脆直接指定userSecretsId

if(env.IsDevelopment())
{
    builder.AddUserSecrets("UserSecretsId");
}

然后就可以通過Configuration["NameOfSecret"]訪問到User Secret了。

項目實踐

下面通過一個控制臺程序演示。

  1. mkdir user-secrets && cd user-secrets # 新建一個目錄

  2. dotnet new console # 創建一個控制臺應用

  3. dotnet restore # 還原包

  4. dotnet add package Microsoft.Extensions.Configuration.UserSecrets -v 1.1.2 # 安裝包

  5. code . # 使用Visual Studio Code打開

  6. 在user-secrets.csproj中添加UserSecretsId

    <PropertyGroup>
    <UserSecretsId>3BF2D901-89B9-437D-8856-CCA63D4606F7</UserSecretsId>
    </PropertyGroup>

    以及SecretManager工具包

    <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.1" />
    </ItemGroup>
  7. dotnet user-secrets set AppKey 12345 # 添加名為AppKey的Secret

  8. 為了判斷是在開發環境中需要添加環境變量因此需要再安裝一個包
    dotnet add package Microsoft.Extensions.Configuration.EnvironmentVariables -v 1.1.2

  9. 打開Program.cs加入以下代碼

    class Program
    {
        public static IConfigurationRoot Configuration { get; set; }
        static void Main(string[] args)
        {
             var builder = new ConfigurationBuilder()
            .AddEnvironmentVariables();
    
            var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
            if (environment == "Development")
            {
                builder.AddUserSecrets<Program>();
            }
            Configuration = builder.Build();
    
            Console.WriteLine(Configuration["AppKey"]);
        }
    }
  10. 運行
    ASPNETCORE_ENVIRONMENT=Development dotnet run

    export ASPNETCORE_ENVIRONMENT=Development
    dotnet run

ASP.NET Core類似這里就不再演示了。



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万山特区| 布尔津县| 阳高县| 磐石市| 济阳县| 滨州市| 黔江区| 敖汉旗| 白水县| 新泰市| 岫岩| 新龙县| 云安县| 乡宁县| 敦煌市| 铅山县| 龙陵县| 策勒县| 湖州市| 武陟县| 浪卡子县| 五家渠市| 沈阳市| 樟树市| 吴川市| 长宁县| 台山市| 连江县| 崇明县| 阳城县| 勐海县| 英德市| 镇江市| 乌鲁木齐市| 信阳市| 乐清市| 林芝县| 巢湖市| 永川市| 鱼台县| 文化|