.NET控制台应用Key Vault认证异常:运行EXE无法获取令牌
解决方案
方法一:使用ClientSecretCredential直接认证
修改代码,替换DefaultAzureCredential为ClientSecretCredential,传入租户ID、客户端ID和服务主体密钥完成认证:
using Azure.Identity; using Azure.Security.KeyVault.Secrets; // 替换为你的实际参数 var tenantId = "你的租户ID"; var clientId = "你的客户端ID"; var clientSecret = "你的服务主体密钥"; var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var secretClient = new SecretClient(new Uri("https://你的密钥保管库名称.vault.azure.net/"), credential); // 替换为你要获取的密钥名称 var secret = await secretClient.GetSecretAsync("目标密钥名称"); Console.WriteLine("获取到的密钥值:" + secret.Value.Value);
方法二:通过环境变量启用EnvironmentCredential
如果不想在代码中硬编码凭据,可以配置环境变量让DefaultAzureCredential自动使用环境凭据认证,无需修改原代码:
需要设置的环境变量:
AZURE_TENANT_ID: 你的租户IDAZURE_CLIENT_ID: 你的客户端IDAZURE_CLIENT_SECRET: 你的服务主体密钥
Windows环境设置方式:
- 临时生效(当前命令行窗口):
打开PowerShell执行:$env:AZURE_TENANT_ID = "你的租户ID" $env:AZURE_CLIENT_ID = "你的客户端ID" $env:AZURE_CLIENT_SECRET = "你的服务主体密钥" # 运行你的EXE文件 .\你的应用程序.exe - 永久生效:
打开命令提示符执行:
重启命令提示符后运行EXE即可。setx AZURE_TENANT_ID "你的租户ID" setx AZURE_CLIENT_ID "你的客户端ID" setx AZURE_CLIENT_SECRET "你的服务主体密钥"
关键前提
- 确保你的服务主体已被授予Key Vault的访问权限(如添加"密钥保管库机密用户"角色),否则即使认证成功也无法读取密钥。
- 服务主体的密钥是Azure AD中生成的凭据,并非Key Vault中存储的密钥名称,注意区分两者。
内容的提问来源于stack exchange,提问作者rahul kaushik
相关产品推荐
相关产品推荐

