• ASP.NET Core-用户机密文件【转】


    一. 基本概念

    1. 背景

      通常我们将 AppSecret 和数据库连接字符串存储在配置文件中,web.config 或 appsettings.json,配置文件都需要提交到SVN 和git上,对于一些开发者自己用而不需要提交的数据, 并不想进行提交,这个时候可以存储到本地机密文件中。

    或者一些机密文件,不想写到配置文件中,我们想保存到服务器磁盘的机密文件中,这样更加安全。

    2. 机密文件相关指令

    说明:要进入对应项目的根目录,打开命令行程序,进行下面的指令的输入.

    (1).【dotnet user-secrets init】:初始化密钥存储,前面的命令将 UserSecretsId 元素添加到 .csproj文件的 PropertyGroup 中。 默认情况下,UserSecretsId 的内部文本是一个 GUID。内部文本是任意的,但对项目是唯一的。

    右键项目→编辑项目文件→即可查看生成的对应的UserSecretsId。

     

    (2).【dotnet user-secrets set "xxx" "xxx"】:设置机密文件,eg:【dotnet user-secrets set "pwd" "123456"】,设置pwd的值为123456 。

    PS:到目录【%APPDATA%microsoftUserSecrets】下,找到刚才对应的UserSecretsId命名的文件夹,即该项目所有的机密文件都存在在该文件夹下的Secrets.json中。

    PS:设置到指定位置 【dotnet user-secrets set "Movies:ServiceApiKey" "12345" --project "C:appsWebApp1srcWebApp1"】

    也可以直接右键项目→管理用户机密→直接打开secrets.json这个文件。

     

     

    (3).【dotnet user-secrets remove "xxx"】:删除单个机密文件。

    (4).【dotnet user-secrets clear】:删除所有机密文件

    (5).【dotnet user-secrets list】:列出所有机密文件

    二. 项目使用

    1. 谁优先使用的问题

      当配置文件和机密文件同时存在的使用,获取同一个键,获取的是机密文件中的值。

    原因:当项目调用时,用户机密配置源会自动添加到 CreateDefaultBuilder 以使用预先配置的默认值初始化主机的新实例。 DevelopmentEnvironmentName 时,CreateDefaultBuilder 调用 AddUserSecrets。

    但如果没有CreateDefaultBuilder,可以手动builder.AddUserSecrets<Startup>(); 或者 builder.AddUserSecrets("UserSecretsId xxxx");

    2. 获取绑定类

    (1).进行机密文件的添加:【dotnet user-secrets set "UserSettings:userName" "MaRu"】 和 【dotnet user-secrets set "UserSettings:userAge" 29】

    (2).创建UserSettings类

    1   public class UserSettings
    2     {
    3         public string userName { get; set; }
    4         public int userAge { get; set; }
    5     }

    (3).利用GetSection和Get方法进行类的绑定。

    1           //获取绑定类
    2             {
    3                 var UserSettings = _Configuration.GetSection("UserSettings").Get<UserSettings>();
    4                 var userName = UserSettings.userName;
    5                 var userAge = UserSettings.userAge;
    6             }

    3. 机密字符串的替换

    (1).背景:数据库连接字符串写在appsettings.json中,但是密码不想写在里面,想写在机密文件中,那么我们该如何实现呢?

    (2) 步骤:

    A:将密码写到机密文件中 【dotnet user-secrets set "pwd" "123456"】

    B:获取配置文件原先的字符串和机密文件中的pwd,将“PassWord=pwd”赋值到原先的字符串中,当然这里可以用字符串的拼接,但我们这里通过“SqlConnectionStringBuilder”类,来进行处理,需要安装程序集【System.Data.SqlClient】

    代码详见:ConfigureService

     1        public void ConfigureServices(IServiceCollection services)
     2         {
     3             //需要安装程序集:【System.Data.SqlClient】
     4             var builder = new SqlConnectionStringBuilder(Configuration.GetConnectionString("str"));
     5             builder.Password = Configuration["pwd"]; //从机密文件中获取pwd,并给赋值给上述的数据库连接串
     6             var newStr = builder.ConnectionString;  //得到新的连接串(包含Password),下面可以传给EF进行使用了
     7 
     8 
     9             services.AddControllersWithViews();
    10         }

     转:https://www.cnblogs.com/yaopengfei/p/12129746.html

  • 相关阅读:
    Elasticsearch 支持拼音自动补全
    laravel自动补全链接
    laravel的服务容器(药箱)、服务提供者(小盒子)、Facades(更方便用药),方便大家透彻理解
    php static静态属性和静态方法
    php面向对象的构造方法与析构方法
    MySQL事务-ROLLBACK,COMMIT用法详解
    php 事务处理transaction
    Python:初步学习Python
    iOS:自己写的一个星级评价的小Demo
    iOS:枚举enum的使用
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12149674.html
Copyright © 2020-2023  润新知