译文链接:https://www.infoworld.com/article/3576292/how-to-work-with-user-secrets-in-asp-net-core.html

在应用程序开发时,你肯定会有一些特别需要保护的数据,这些数据通常是非常机密的,敏感的,禁止和别人共享,这些信息包括:数据库连接串,你懂的,毕竟里面有 userid 和 password,还有 OAuth 验证用到的 accesskey,apikey 或者配置 azure,aws 等云服务的连接信息。

当项目和别人共享的时候,这些敏感信息自然也暴露给了别人,这通常是我不想看到的结果,那怎么去预防呢?ASP.NET Core 中有一个叫做 User Secrets 特性,它允许将用户敏感信息存储在项目外的一个 json 文件中,那怎么去管理这个 json 文件呢?你可以通过 命令行工具 Secrets Manager 去进行敏感信息的管理,这篇文章主要就是来聊一聊怎么去管理这个 User Secrets

在项目中添加 user secrets

可以很方便的将 user secrets 添加到你的项目中,你需要做的仅仅是。

  • 在解决方案管理器上选择 project

  • 右键点击选择 Manage User Secrets

然后 Visual Studio 2019 会自动打开一个 secrets.json 文件。

接下来在 secrets.json 中添加一些敏感数据。


{"ConnectionString": "This is a test connection string","APIKey": "This is s secret key","AppSettings": {"GlobalSettings": {"GlobalAccessKey": "This is a global access key!"}}
}

对了, 默认的 secret.json 文件路径如下:


C:\Users\38034\AppData\Roaming\Microsoft\UserSecrets\b87644d3-6898-47e4-8580-b3de15f22b96

把项目编译一下,然后打开 project 的meta文件 .csproj,你会发现新增了一个 UserSecretsId 节点,代码如下:


<Project Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>netcoreapp3.1</TargetFramework><UserSecretsId>e4f51d14-ddc1-48f4-bb34-84c114e3d6d0</UserSecretsId></PropertyGroup>
</Project>

使用 Secret Manager tool 管理工具

这个 Secret Manager tool 是 .NET Core 中的一个命令行管理工具,主要用来管理 Configuration 和 敏感数据,在这一节中我们一起看看怎么使用这个小工具。

生成 user secrets

在 cmd 窗口输入如下命令:


dotnet user-secrets init

新增 user secrets 内容

要想看到当前所有的 secrets,输入以下命令。


dotnet user-secrets list

下图展示了我之前创建的一些 key。

接下来用 set 命令设置一条敏感数据。


dotnet user-secrets set "AuthorApiKey" "xyz1@3"

访问 secret

为了能够实现用代码去访问,可以用 ASP.NET Core 里的 Configuration Api,HomeController 的代码如下:

public class HomeController : Controller{private readonly ILogger<HomeController> _logger;public HomeController(ILogger<HomeController> logger){_logger = logger;}//Action methods go here - this is done for brevity}

因为需要用 Configuration Api 去访问,这里我准备用依赖注入的方式来实现 configuration 的注入,代码如下:

public class HomeController : Controller{private readonly ILogger<HomeController> _logger;private readonly IConfiguration _config;public HomeController(ILogger<HomeController> logger,IConfiguration config){_logger = logger;_config = config;}//Action methods go here - this is done for brevity}

删除 secret

要想删除这个 key,可以使用下面的命令。


dotnet user-secrets remove "AuthorApiKey"

如果你想移除所有的key,可以使用下面的命令。


dotnet user-secrets clear

如果你想移除某一个层级中的子层key,可以使用 : 运算符,代码如下:


dotnet user-secrets remove "AppSettings:GlobalSettings"

ASP.NET Core 重定义了对 Configuration 中的数据配置,管理和保护,而且还有这个非常 ????????的  User Secrets,可以很好的替代以前用环境变量的方式,而且可以确保源码中不再有任何敏感数据,毕竟 User Secrets 是存储在项目之外的一个文件夹下,这个路径之前也给大家看到了,是 windows 的一个 用户文件夹。

不过这里有一个缺点,存储在 User Secrets 中的数据是以明文形式存在的,不用怕,后面的文章我会讨论一些其他的方法来保护用户敏感数据,比如说:Azure application settings 和  Azure key vault

如何在 Asp.Net Core 中 管理敏感数据相关推荐

  1. 如何在 ASP.NET Core 中使用 HttpClientFactory ?

    ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...

  2. 如何在 ASP.Net Core 中使用 Autofac

    依赖注入可以有效的实现对象之间的 松耦合 并能够实现代码的可测试和可维护性,ASP.Net Core 提供了一个极简版的容器实现对 依赖注入 的原生支持,然而内置的依赖注入容器相比成熟的 依赖注入容器 ...

  3. 如何在ASP.NET Core中使用Azure Service Bus Queue

    原文:USING AZURE SERVICE BUS QUEUES WITH ASP.NET CORE SERVICES 作者:damienbod[1] 译文:如何在ASP.NET Core中使用Az ...

  4. 如何在 ASP.Net Core 中使用 Lamar

    ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器,实际上,你还可以使用第三方的 依赖注入容器 来替代它,依赖注入是一种设计模式,它能够有效的实现对象之间的解耦并有利于提高单元测试和 ...

  5. 如何在 ASP.Net Core 中使用 MediatR

    MediatR 是一个 中介者模式 的.NET开源实现, 中介者模式 管控了一组对象之间的相互通讯并有效的减少了对象之间错综复杂的相互依赖,在 中介者模式 中,一个对象不需要直接和另一个对象进行通讯, ...

  6. 如何在 ASP.Net Core 中对接 WCF

    在 REST API 出现之前,SOAP (Simple Object Access Protocol) 一直都是基于 web 的标准协议,虽然现在 REST 大行其道,但在平时开发中总会遇到对接第三 ...

  7. 如何在 ASP.Net Core 中使用 NCache

    虽然 ASP.Net Core 中缺少 Cache 对象,但它引入了三种不同的cache方式. 内存缓存 分布式缓存 Response缓存 Alachisoft 公司提供了一个开源项目 NCache, ...

  8. 如何在 ASP.Net Core 中使用 Configuration Provider

    ASP.NET Core 是一个开源的,跨平台的,精简的模块化框架,可用于构建高性能,可扩展的web应用程序, ASP.NET Core 中的数据配置常用 k-v 的形式存储,值得注意的是,新的数据配 ...

  9. 如何在 ASP.Net Core 中使用 Serilog

    记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式. 将 ...

最新文章

  1. 201671010128 2017-09-17《Java程序设计》之步步深入面向对象
  2. 宇瞻U盘出现无法格式化 写保护的完美解决办法 厂家提供的
  3. 开源应用框架BitAdminCore:更新日志20180605
  4. UNIX再学习 -- 网络与网络协议
  5. html选择按键点击后锁死输入框_js实现的键盘开启大写锁定提示和密码显示与隐藏的效果...
  6. Dubbo(十二)dubbo的服务版本配置以及本地存根使用介绍
  7. java html转图片_Python一键转Java?“Google翻译”你别闹
  8. 2017.9.5 DZY Loves Math 失败总结
  9. 基于NodeJS的HTTP server Plus 2:防盗链(referer)
  10. 事物与持久化_DDD之聚合持久化应该怎么做?
  11. Quicksort算法之父——1980年图灵奖获得者查尔斯·霍尔
  12. js之数组打印看到长度和实际长度不同(浅拷贝)
  13. JS的基本概念和语法
  14. dtl文件java_数据库之DTL——数据事务语言 事务
  15. 腕管综合征(鼠标手)的康复之路
  16. Java中if条件语句举例详解
  17. Pytorch笔记-6
  18. vscode如何自动格式化代码
  19. PLC学习之路001
  20. 动态绑定和静态绑定详解

热门文章

  1. TypeError: pyqtSignal must be bound to a QObject
  2. html中radio,checkbox值的获取、赋值、注册事件
  3. Delphi全局热键的注册
  4. 学习总结——Selenium元素定位
  5. uml 类图聚合与组合
  6. USING HAVING
  7. Dave Python 练习三 -- 对象
  8. 批量删除推文_如何搜索(和删除)您的旧推文
  9. android 文本后图标_如何在Android中更改文本,图标等的大小
  10. mysql时间字段条件查询_mysql 查询 时间作为查询条件