如何在ASP.NET Core中管理用户机密

利用ASP.NET Core中的用户机密管理来防止项目中敏感应用程序数据的共享

如何在ASP.NET Core中管理用户机密
Thinkstock

使用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项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
  4. 点击下一步。
  5. 在“配置新项目”窗口中,指定新项目的名称和位置。
  6. 根据您的喜好,有选择地选中“将解决方案和项目放在同一目录中”复选框。
  7. 单击创建。
  8. 在接下来显示的“创建新的ASP.NET Core Web应用程序”窗口中,从顶部的下拉列表中选择.NET Core作为运行时,并选择ASP.NET Core 3.1(或更高版本)。
  9. 选择“ Web应用程序(Model-View-Controller)”作为项目模板,以创建新的ASP.NET Core MVC应用程序。 
  10. 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不使用这些功能。
  11. 确保将身份验证设置为“不进行身份验证”,因为我们也不会使用身份验证。
  12. 单击创建。

完成这些步骤后,将在Visual Studio 2019中创建一个新的ASP.NET Core MVC项目。我们将在以下各节中使用此项目来说明如何在ASP.NET Core 3.1项目中管理用户机密。

将用户机密管理添加到您的项目

将用户机密管理添加到项目中非常简单。您需要做的就是在Solution Explorer窗口中选择项目,右键单击该项目,然后选择Manage User Secrets,如下图1所示。

管理用户秘密网核 IDG

图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显示了我们之前创建的键的列表。

列出用户秘密网核 IDG

图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中执行更多操作:

版权© 2020 IDG通讯,Inc.