如何在ASP.NET Core中管理用户机密
利用ASP.NET Core中的用户机密管理来防止项目中敏感应用程序数据的共享
使用ASP.NET Web应用程序时,您将需要保护某些应用程序数据,即用户机密,这些数据不应与其他人共享。您的用户机密可能包括数据库连接字符串,该字符串还包含数据库的用户ID和密码。您可能还希望避免共享诸如Azure或AWS之类的云服务的信息,例如访问密钥,API密钥和连接信息详细信息。
但是,当您与他人共享您的项目时,此秘密信息也将被共享。我们如何防止这种情况? ASP.NET Core中名为“用户机密”的功能使您可以将用户机密存储在项目树之外的JSON文件中,甚至可以使用称为“机密管理器”的命令行工具进行管理。本文讨论了如何在ASP.NET Core中使用User Secrets API。
若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。如果您还没有副本,可以 在此处下载Visual Studio 2019.
在Visual Studio 2019中创建ASP.NET Core MVC项目
首先,让我们在Visual Studio 2019中创建一个ASP.NET Core项目。假设系统中已安装Visual Studio 2019,请按照以下概述的步骤在Visual Studio中创建一个新的ASP.NET Core项目。
- 启动Visual Studio IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
- 点击下一步。
- 在“配置新项目”窗口中,指定新项目的名称和位置。
- 根据您的喜好,有选择地选中“将解决方案和项目放在同一目录中”复选框。
- 单击创建。
- 在接下来显示的“创建新的ASP.NET Core Web应用程序”窗口中,从顶部的下拉列表中选择.NET Core作为运行时,并选择ASP.NET Core 3.1(或更高版本)。
- 选择“ Web应用程序(Model-View-Controller)”作为项目模板,以创建新的ASP.NET Core MVC应用程序。
- 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不使用这些功能。
- 确保将身份验证设置为“不进行身份验证”,因为我们也不会使用身份验证。
- 单击创建。
完成这些步骤后,将在Visual Studio 2019中创建一个新的ASP.NET Core MVC项目。我们将在以下各节中使用此项目来说明如何在ASP.NET Core 3.1项目中管理用户机密。
将用户机密管理添加到您的项目
将用户机密管理添加到项目中非常简单。您需要做的就是在Solution Explorer窗口中选择项目,右键单击该项目,然后选择Manage User Secrets,如下图1所示。
图1
这将在Visual Studio IDE中打开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 \ joydip \ AppData \ Roaming \ Microsoft \ UserSecrets \ e4f51d14-ddc1-48f4-bb34-84c114e3d6d0
当您打开项目的.csproj文件时,您会注意到已添加UserSecretsId元素,如下面的代码段所示。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>e4f51d14-ddc1-48f4-bb34-84c114e3d6d0</UserSecretsId>
</PropertyGroup>
</Project>
使用.NET Core中的Secret Manager工具
Secret Manager工具是.NET Core中可用的命令行工具,用于管理您的配置和秘密数据。在本节中,我们将研究如何使用此工具。
启用用户机密
在命令提示符处键入以下命令:
dotnet user-secrets init
设定秘密
要列出可用的机密,可以使用以下命令:
dotnet user-secrets list
下面的图2显示了我们之前创建的键的列表。
图2
您可以使用以下命令来设置密钥:
dotnet user-secrets set "AuthorApiKey" "[email protected]"
访问秘密
若要以编程方式访问用户机密,可以利用ASP.NET Core中的Configuration API。让我们更新HomeController类以使其能够访问配置数据。乍一看,HomeController类如下所示:
public class 首页Controller : Controller
{
private readonly ILogger<HomeController> _logger;
public 首页Controller(ILogger<HomeController> logger)
{
_logger = logger;
}
//Action methods go here - this is done for brevity
}
以下代码段说明了如何更新HomeController类并利用依赖项注入,以便能够使用构造函数注入来注入IConfiguration的实例。
public class 首页Controller : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IConfiguration _config;
public 首页Controller(ILogger<HomeController> logger,
IConfiguration config)
{
_logger = logger;
_config = config;
}
//Action methods go here - this is done for brevity
}
删除秘密
要删除密钥,可以使用以下命令:
dotnet user-secrets remove "AuthorApiKey"
如果要删除所有密钥,则可以改用以下命令:
dotnet user-secrets clear
这是从存储的机密中删除GlobalSettings的同一命令的变体:
dotnet user-secrets remove "AppSettings:GlobalSettings"
在ASP.NET Core中已重新定义了配置,管理和保护配置数据的功能。用户秘密是ASP.NET Core中的一项重要功能,它是使用环境变量的绝佳替代方法。用户密钥可确保源代码中不包含敏感数据。而是将用户机密存储在项目文件夹之外,即文件系统中用户的配置文件文件夹中。
但是,一个缺点是用户机密存储的数据未加密。我将在以后的文章中讨论其他保护用户机密的选项,例如Azure应用程序设置和Azure密钥库。
如何在ASP.NET Core中执行更多操作:
- 如何在ASP.NET Core中构建gRPC应用程序
- 如何在ASP.NET Core中重定向请求
- 如何在ASP.NET Core中使用属性路由
- 如何将参数传递给ASP.NET Core MVC中的操作方法
- 如何在ASP.NET Core中使用API分析器
- 如何在ASP.NET Core中使用路由数据令牌
- 如何在ASP.NET Core中使用API版本控制
- 如何在ASP.NET Core 3.1中使用数据传输对象
- 如何处理ASP.NET Core MVC中的404错误
- 如何在ASP.NET Core 3.1的操作筛选器中使用依赖项注入
- 如何在ASP.NET Core中使用选项模式
- 如何在ASP.NET Core 3.0 MVC中使用终结点路由
- 如何在ASP.NET Core 3.0中将数据导出到Excel
- 如何在ASP.NET Core 3.0中使用LoggerMessage
- 如何在ASP.NET Core中发送电子邮件
- 如何在ASP.NET Core中将数据记录到SQL Server
- 如何在ASP.NET Core中使用Quartz.NET安排作业
- 如何从ASP.NET Core Web API返回数据
- 如何在ASP.NET Core中格式化响应数据
- 如何使用RestSharp使用ASP.NET Core Web API
- 如何使用Dapper执行异步操作
- 如何在ASP.NET Core中使用功能标志
- 如何在ASP.NET Core中使用FromServices属性
- 如何在ASP.NET Core中使用Cookie
- 如何在ASP.NET Core中使用静态文件
- 如何在ASP.NET Core中使用URL重写中间件
- 如何在ASP.NET Core中实施速率限制
- 如何在ASP.NET Core中使用Azure应用程序见解
- 在ASP.NET Core中使用高级NLog功能
- 如何处理ASP.NET Web API中的错误
- 如何在ASP.NET Core MVC中实现全局异常处理
- 如何在ASP.NET Core MVC中处理空值
- ASP.NET Core Web API中的高级版本控制
- 如何在ASP.NET Core中使用辅助服务
- 如何在ASP.NET Core中使用Data Protection API
- 如何在ASP.NET Core中使用条件中间件
- 如何在ASP.NET Core中使用会话状态
- 如何在ASP.NET Core中编写高效的控制器
版权© 2020 IDG通讯,Inc.