如何使用Key Vault获取ASP.NET Redis会话状态的访问密钥?
从Azure Key Vault获取Redis会话状态访问密钥实现方案
1. 安装必要NuGet包
执行以下命令安装依赖:
Install-Package Azure.Security.KeyVault.Secrets Install-Package Azure.Identity Install-Package Microsoft.Web.Redis.RedisSessionStateProvider
2. 创建自定义Redis会话状态提供器
继承官方的Redis会话状态提供器,在初始化阶段从Key Vault拉取密钥:
using Microsoft.Web.Redis; using Azure.Security.KeyVault.Secrets; using Azure.Identity; namespace YourAppNamespace { public class KeyVaultRedisSessionStateProvider : RedisSessionStateProvider { public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { // 配置Key Vault地址和密钥名称 var keyVaultUrl = "https://你的密钥保管库名称.vault.azure.net/"; var secretName = "RedisAccessKey"; // 替换为你在Key Vault中存储的密钥名称 // 初始化Key Vault客户端 var secretClient = new SecretClient(new Uri(keyVaultUrl), new DefaultAzureCredential()); // 获取密钥并覆盖配置中的accessKey var secret = secretClient.GetSecretAsync(secretName).Result; config["accessKey"] = secret.Value.Value; // 调用基类初始化逻辑 base.Initialize(name, config); } } }
3. 修改web.config配置
替换原来的提供器类型为自定义类,移除硬编码的accessKey:
<sessionState mode="Custom" customProvider="MySessionStateStore"> <providers> <add name="MySessionStateStore" type="YourAppNamespace.KeyVaultRedisSessionStateProvider" host="你的Redis缓存主机名.redis.cache.windows.net" ssl="true" /> </providers> </sessionState>
关键注意事项
- 权限配置:确保应用在Azure环境中已启用托管标识,并给该标识分配Key Vault的「密钥/秘密用户」权限;本地开发时,使用Azure CLI登录即可让
DefaultAzureCredential自动获取权限。 - 生产环境优化:避免直接使用
.Result同步等待异步调用,可在Application_Start中提前预取密钥并缓存,减少Key Vault调用次数。 - 替换占位符:将代码中的密钥保管库地址、Redis主机名、密钥名称替换为实际值。
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

