zoukankan      html  css  js  c++  java
  • 第二十七节:安全存储机密程序

    一. 基本概念

    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/11633385.html 

    !

    • 作       者 : Yaopengfei(姚鹏飞)
    • 博客地址 : http://www.cnblogs.com/yaopengfei/
    • 声     明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
    • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
     
  • 相关阅读:
    SGU 176.Flow construction (有上下界的最大流)
    POJ 2391.Ombrophobic Bovines (最大流)
    poj 1087.A Plug for UNIX (最大流)
    poj 1273.PIG (最大流)
    POJ 2112.Optimal Milking (最大流)
    SGU 196.Matrix Multiplication
    SGU 195. New Year Bonus Grant
    关于multicycle path
    ppt做gif动图
    codeforces 598A Tricky Sum
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/12129746.html
Copyright © 2011-2022 走看看