You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:57:28