作者:Rick Anderson、Kirk Larkin、Daniel Roth 和 Scott Addie
查看或下载示例代码(如何下载)
本文介绍如何在开发计算机上管理 ASP.NET Core 应用的敏感数据。 切勿将密码或其他敏感数据存储在源代码或配置文件中。 不得将生产机密用于开发或测试。 机密不得随应用一起部署。 应通过受控方式(如 Azure 密钥库)访问生产机密。 Azure 测试和生产机密可以使用 Azure 密钥库配置提供程序进行存储和保护。
有关测试和生产环境的身份验证的详细信息,请参阅 安全身份验证流。
环境变量用于避免在代码或本地配置文件中存储应用机密。 环境变量会替代之前指定的所有配置源的配置值。
请考虑使用 ASP.NET Core Web 应用,其中已启用“个人用户帐户”安全性。 默认数据库连接字符串包含在项目的 文件中,并包含密钥 。 默认连接字符串适用于 LocalDB,它在用户模式下运行,不需要密码。 在应用部署期间,可使用环境变量的值替代 键值。 环境变量可能会存储具有敏感凭据的完整连接字符串。
所有平台上的环境变量分层键都不支持 分隔符。 例如,Bash 不支持 分隔符。 双下划线 是:
- 受所有平台支持。
- 自动替换为冒号,。
机密管理器工具存储应用程序开发期间的敏感数据。 在此上下文中,一段敏感数据是应用机密。 应用机密存储在与项目树不同的位置。 应用机密与特定项目关联,或者跨多个项目共享。 应用机密不会签入到源代码管理中。
机密管理器工具会隐藏实现详细信息,例如值的存储位置和存储方法。 可在不知道这些实现详细信息的情况下使用该工具。 这些值存储在本地计算机的用户配置文件文件夹中的 JSON 文件中:
在上述文件路径中,将 替换为在项目文件中指定的 值。
不要编写依赖于使用机密管理器工具保存的数据的位置或格式的代码。 这些实现详细信息可能有变。 例如,机密值不会加密,但将来可能会加密。
机密管理器工具会对用户配置文件中存储的特定于项目的配置设置进行操作。
在 .NET Core SDK 3.0.100 或更高版本中,机密管理器工具包含一个 命令。 若要使用用户机密,请在项目目录中运行以下命令:
讯享网
上述命令会将 元素添加到项目文件的 中。 默认情况下, 的内部文本是 GUID。 内部文本是任意的,但对于项目来说是唯一的。
讯享网
在 Visual Studio 中,在解决方案资源管理器中右键单击该项目,然后从上下文菜单中选择“管理用户机密”。 该手势会将 元素(填充有 GUID)添加到项目文件中。
定义由键和值组成的应用机密。 机密与项目的 值相关联。 例如,从项目文件所在的目录中运行以下命令:
在上述示例中,冒号表示 是具有 属性的对象文字。
也可从其他目录使用机密管理器工具。 使用 选项提供项目文件所在的文件系统路径。 例如:
讯享网
Visual Studio 的管理用户机密手势会在文本编辑器中打开文件。 将的内容替换为要存储的键/值对。 例如:
通过 或 进行修改后,平展 JSON 结构。 例如,运行 会折叠 对象文字。 修改后的文件类似于以下 JSON:
讯享网
可通过管道将 JSON 传递给 命令来设置一批机密。 在下面的示例中,将文件的内容通过管道传递给命令。
若要访问机密,请完成以下步骤:
- 注册用户机密配置源
- 通过配置 API 读取机密
用户机密配置提供程序 会向 .NET 配置 API 注册适当的配置源。
当项目调用 时,用户机密配置源是在开发模式中自动添加的。 当 是 时, 会调用 :
如果未调用 ,则通过在 中调用 来显式添加用户机密配置源。 只有在开发环境中运行应用时才调用 ,如以下示例所示:
讯享网
如果注册了用户机密配置源,则 .NET 配置 API 可以读取机密。 构造函数注入可用于获取对 .NET 配置 API 的访问。 请考虑以下读取 键的示例:
Startup 类:
RazorPages 页面模型:
讯享网
有关详细信息,请参阅访问启动中的配置和访问Razor Pages中的配置。
对于聚合相关属性来说,将整个对象文字映射到 POCO(具有属性的简单 .NET 类)很有用。
假设应用的文件包含下面两个机密:
若要将上述机密映射到 POCO,请使用 .NET 配置 API 的对象图绑定功能。 下面的代码绑定到自定义 POCO 并访问 属性值:
讯享网
和 机密映射到 中的相应属性:
以纯文本形式存储密码不太安全。 从不将机密存储在配置文件中,例如 ,可能会签入源代码存储库。
例如,存储在其中的数据库连接字符串不应包含密码。 而是将密码存储为机密,并在运行时将密码包含在连接字符串中。 例如:
讯享网
将 前面的示例中的占位符替换为密码值。 在对象的属性上设置机密的值,将其作为密码值包含在连接字符串中:
假设应用的文件包含下面两个机密:
讯享网
从项目文件所在的目录中运行以下命令:
随即显示以下输出:
讯享网
在前面的示例中,键名称中的冒号表示中的对象层次结构。
假设应用的文件包含下面两个机密:
从项目文件所在的目录中运行以下命令:
讯享网
已修改应用的文件以删除与键关联的键值对:
显示以下消息:
讯享网
假设应用的文件包含下面两个机密:
从项目文件所在的目录中运行以下命令:
讯享网
已从文件中删除应用的所有用户机密:
运行 将显示以下消息:
讯享网
若要在 Visual Studio 中管理用户机密,请在解决方案资源管理器中右键单击该项目,然后选择“管理用户机密”:

请参阅此 GitHub 问题。
面向 的项目会自动包括对用户机密的支持。 对于面向 (例如控制台应用程序)的项目,请显式安装配置扩展和用户机密 NuGet 包。
使用 PowerShell:
使用 .NET CLI:
讯享网
安装包后,请初始化项目并使用与 Web 应用相同的方式设置机密。 以下示例显示了一个控制台应用程序,该应用程序检索使用密钥“AppSecret”设置的机密的值:
- 若要了解如何从 IIS 访问用户机密,请查看此问题和此问题。
- ASP.NET Core 中的配置
- ASP.NET Core 中的 Azure Key Vault 配置提供程序

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/165413.html