ASP.NET Core Data Protection API 密钥存储配置有五种方法:一、文件系统存储,适用于单机或共享网络路径;二、Windows 注册表存储,限 Windows 单机部署;三、Azure Key Vault,提供集中化与硬件级安全;四、Redis 存储,支持高可用跨节点同步;五、SQL Server 存储,便于审计与权限管控。

如果您在 ASP.NET Core 应用中使用 Data Protection API,但密钥未被持久化或跨服务器部署时密钥无法共享,则可能是密钥存储配置不当。以下是配置密钥存储的多种方法:
一、使用文件系统存储密钥
将密钥以 XML 文件形式保存在指定本地路径,适用于单机部署或共享网络文件系统(如 SMB/NFS)场景,确保所有实例访问同一目录。
1、在 Program.cs 中调用 AddDataProtection 并配置 PersistKeysToFileSystem 方法。
2、传入 DirectoryInfo 实例,指向具有读写权限的物理路径,例如 "C:\\shared-keys" 或 "/var/www/shared-keys"。
3、可选调用 SetApplicationName 明确标识应用作用域,避免密钥被其他应用误用。
二、使用注册表存储密钥(仅 Windows)
将密钥加密后存入 Windows 注册表指定路径,适合单机 Windows 服务部署,依赖操作系统访问控制策略保障安全性。
1、在 Program.cs 中调用 AddDataProtection 后链式调用 PersistKeysToRegistry。
2、传入 RegistryKey 实例,例如 Microsoft.Win32.Registry.CurrentUser.CreateSubKey("SOFTWARE\\MyApp\\DataProtection")。
3、确保运行应用的 Windows 用户对目标注册表项拥有 读取和写入权限。
三、使用 Azure Key Vault 存储密钥
利用 Azure Key Vault 托管密钥材料并执行加密/解密操作,实现密钥生命周期集中管理与硬件级安全保护。
1、安装 Microsoft.AspNetCore.DataProtection.AzureKeyVault NuGet 包。
2、在 Program.cs 中通过 AddAzureKeyVault 扩展方法注册密钥保管库客户端。
3、提供有效的 Azure AD 认证凭据、Key Vault URI 和用于封装主密钥的 密钥名称。
四、使用 Redis 分布式缓存存储密钥
借助 Redis 的原子操作与高可用特性实现密钥的跨节点同步,适用于容器化或云原生多实例部署环境。
1、安装 Microsoft.AspNetCore.DataProtection.Redis NuGet 包。
2、在 Program.cs 中调用 AddDataProtection 后使用 PersistKeysToStackExchangeRedis 方法。
3、传入已配置连接字符串的 IConnectionMultiplexer 实例,并确保 Redis 服务器启用 持久化(RDB/AOF) 避免重启丢失密钥。
五、使用 SQL Server 数据库存储密钥
将密钥以加密形式存入关系型数据库表中,便于审计、备份与权限精细化控制,适合已有成熟 SQL Server 基础设施的企业环境。
1、安装 Microsoft.AspNetCore.DataProtection.SqlServer NuGet 包。
2、在 Program.cs 中调用 PersistKeysToSqlServer,传入数据库连接字符串和 DbContext 类型。
3、首次运行时自动创建 DataProtectionKeys 表;需确保数据库用户具备对该表的 INSERT、SELECT、DELETE 权限。










