调用Azure Key Vault API获取密钥遇401未授权(AKV10022受众错误)
问题:调用Azure Key Vault密钥列表API返回401未授权(AKV10022: Invalid audience)
我希望通过API获取Azure Key Vault中的密钥,参考了微软官方文档。本地用以下curl命令获取Bearer令牌:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=client_credentials&client_id=3aaf24aa-a918-442f-9973-7c056d3a79ae&client_secret=xxxx&scope=https%3A%2F%2Fmanagement.azure.com%2F.default' https://login.microsoftonline.com/811f967e-0856-4e36-92e3-60224639e39d/oauth2/v2.0/token
但调用Key Vault的Get Keys API时返回401错误:
{ "error": { "code": "Unauthorized", "message": "AKV10022: Invalid audience. Expected https://vault.azure.net, found: https://management.azure.com." } }
备注:我可以通过CLI命令az keyvault key list --vault-name mykeyvault和PowerShell命令Get-AzKeyVaultKey -VaultName 'mykeyvault'正常获取密钥,但希望通过API实现相同功能。有没有人遇到过类似问题并成功解决?
解决方案
问题核心是获取令牌时指定的Scope错误:
- Azure Key Vault服务的受众(Audience)为
https://vault.azure.net,你当前请求的Scope是针对Azure管理API的https://management.azure.com/.default,导致生成的令牌受众不匹配,触发AKV10022错误。 - CLI和PowerShell会自动为Key Vault操作请求正确的Scope,因此能正常工作。
正确的令牌获取命令
将Scope替换为Key Vault专用的Scope即可:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=client_credentials&client_id=3aaf24aa-a918-442f-9973-7c056d3a79ae&client_secret=xxxx&scope=https%3A%2F%2Fvault.azure.net%2F.default' https://login.microsoftonline.com/811f967e-0856-4e36-92e3-60224639e39d/oauth2/v2.0/token
验证步骤
- 获取新令牌后,解析令牌确认
aud字段值为https://vault.azure.net - 使用该令牌调用Key Vault的Get Keys API,即可正常返回密钥列表
内容的提问来源于stack exchange,提问作者Samdeep
相关产品推荐
相关产品推荐

