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

本地.NET应用访问Azure Key Vault的无环境变量密钥认证方案咨询

本地部署Azure应用访问Key Vault的无密钥认证方案

针对你本地部署、已在Azure注册的应用,不想在环境变量存储client id/secret的需求,推荐以下几种无需持久化密钥的认证方案,均可配合DefaultAzureCredential使用:

1. 设备码认证流

这是本地应用常用的无密钥认证方式,适合可临时交互的场景:

  • 原理:应用启动时生成设备码,用户通过浏览器访问指定URL输入码完成认证,认证后的凭据临时存放在内存中(可配置仅内存缓存)
  • 配置方式:在DefaultAzureCredential中启用设备码选项,无需配置任何密钥:
var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
    DeviceCodeCredentialClientId = "你的应用client id",
    ExcludeEnvironmentCredential = true, // 禁用环境变量认证
    ExcludeManagedIdentityCredential = true // 禁用托管身份(本地环境不需要)
});
  • 优势:完全无需存储任何密钥,认证过程由用户手动完成,凭据仅在当前会话有效

2. 复用Azure CLI缓存凭据

如果你日常用Azure CLI管理资源,可直接复用CLI已缓存的认证会话:

  • 原理:DefaultAzureCredential会自动检测Azure CLI的本地缓存凭据,只要你之前通过az login完成认证,应用就能直接复用该会话
  • 配置方式:只需禁用不需要的凭据类型,代码无需额外密钥配置:
var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
    ExcludeEnvironmentCredential = true,
    ExcludeManagedIdentityCredential = true
});
  • 优势:无需额外开发,复用现有CLI认证,凭据缓存由CLI管理,不会暴露在环境变量中

3. Visual Studio/VS Code集成认证

如果在开发环境运行应用,可直接利用IDE的Azure认证会话:

  • 原理:DefaultAzureCredential会自动检测IDE中已登录的Azure账户,直接复用该认证上下文
  • 配置方式:确保你在IDE中已登录Azure账户,代码禁用环境变量和托管身份凭据即可:
var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
    ExcludeEnvironmentCredential = true,
    ExcludeManagedIdentityCredential = true
});
  • 优势:开发阶段零配置,完全无需处理密钥

4. 证书认证(私钥由系统托管)

如果需要无人值守的非交互式场景,可使用证书认证,将证书安装在本地服务器的证书存储中,而非存储密钥:

  • 原理:应用通过访问本地证书存储获取证书,用证书完成Azure认证,证书私钥由操作系统安全管理,不会以明文形式暴露
  • 配置方式:
    1. 将与应用注册关联的证书安装到服务器的本地机器证书存储(如LocalMachine\My)
    2. 代码中指定证书查找参数:
var credential = new ClientCertificateCredential(
    tenantId: "你的租户ID",
    clientId: "你的应用client id",
    certificate: GetCertificateFromStore("证书指纹")
);

// 从证书存储获取证书的辅助方法
X509Certificate2 GetCertificateFromStore(string thumbprint)
{
    using var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadOnly);
    var certs = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, validOnly: false);
    return certs.Count > 0 ? certs[0] : throw new InvalidOperationException("证书未找到");
}
  • 优势:证书私钥由操作系统安全托管,无需在环境变量或配置文件中存储任何密钥字符串

注意事项

  • DefaultAzureCredential会按优先级尝试不同认证方式,建议通过ExcludeXXXCredential选项禁用不需要的方式,避免意外触发环境变量认证
  • 设备码、CLI、IDE认证的凭据有效期有限,需定期重新认证;证书认证只要证书有效即可长期使用

内容的提问来源于stack exchange,提问作者Pramod Prajapati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:55:34