Azure Function在Visual Studio中无法获取Azure Key Vault密钥及身份排查
我有一个包含多种项目类型的Visual Studio 2022解决方案,其中包含一个.NET Core网站和一个Azure Function应用。我使用Azure Key Vault存储密钥,网站项目中通过DefaultAzureCredential获取密钥完全正常,代码如下:
var keyVaultUrl = Environment.GetEnvironmentVariable("AzureKeyVaultUrl"); var client = new SecretClient(new Uri(keyVaultUrl), new DefaultAzureCredential()); var storageAccountName = client.GetSecretAsync("StorageAccountName").GetAwaiter().GetResult().Value;
但本地运行Azure Function应用时,用同样的方式从Azure Key Vault获取密钥却报错:
Azure.Identity.AuthenticationFailedException:
SharedTokenCacheCredential authentication failed: AADSTS9002332:
Application 'cfa8b339-82a2-471a-ju0L-0fc0be7a4093' (Azure Key Vault)
is configured for use by Azure Active Directory users only. Please do
not use the /consumers endpoint to serve this request.
我怀疑错误和Visual Studio运行Azure Function应用的进程身份有关,已尝试以管理员身份运行VS、检查“工具>选项>Azure服务身份验证”的登录状态,问题依旧。想知道:
- 如何检查Visual Studio中运行Azure Function应用的进程身份?
- 有哪些解决该错误的建议?
一、检查Visual Studio中Azure Function的运行进程身份
- 任务管理器查看:
- 启动Azure Function应用后,打开任务管理器,找到
func.exe进程(本地Function的宿主进程)。 - 右键点击该进程,选择“属性”,切换到“详细信息”标签页,查看“用户名”列,即为进程运行的身份。
- 启动Azure Function应用后,打开任务管理器,找到
- 代码输出身份信息:
在Function代码中添加以下代码,运行时会直接输出当前进程身份:var currentIdentity = System.Security.Principal.WindowsIdentity.GetCurrent(); Console.WriteLine($"当前进程身份:{currentIdentity.Name}");
二、解决AADSTS9002332错误的建议
1. 明确指定DefaultAzureCredential的验证优先级
DefaultAzureCredential会按顺序尝试多种验证方式,可能误用到了不适合的凭据(比如SharedTokenCacheCredential)。可以显式排除不需要的验证方式,优先使用Visual Studio凭据:
var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { ExcludeSharedTokenCacheCredential = true, ExcludeAzureCliCredential = false, // 可根据实际需求调整 ExcludeVisualStudioCodeCredential = false }); var client = new SecretClient(new Uri(keyVaultUrl), credential);
2. 检查Azure Key Vault的权限与网络设置
- 登录Azure门户,找到目标Key Vault,进入访问控制(IAM),确保你的Visual Studio登录账号拥有
Key Vault Secrets User或更高权限的角色。 - 检查防火墙和虚拟网络设置:若启用了防火墙,需确保本地IP地址被加入允许列表,或者勾选“允许受信任的Microsoft服务绕过此防火墙”。
3. 重置Visual Studio的Azure身份缓存
缓存的凭据可能出现异常,按以下步骤重置:
- 完全关闭Visual Studio。
- 删除路径
%LOCALAPPDATA%\.IdentityService下的缓存文件夹。 - 重新打开Visual Studio,重新登录Azure账号。
4. 改用Azure CLI凭据测试
先在本地终端登录Azure CLI:
az login
然后修改Function代码,使用Azure CLI凭据尝试获取密钥:
var credential = new AzureCliCredential(); var client = new SecretClient(new Uri(keyVaultUrl), credential);
如果这种方式可行,说明问题出在Visual Studio的凭据配置上,可针对性排查VS的身份验证设置。
内容的提问来源于stack exchange,提问作者Ayo Adesina

