401 在 API 中从 Key Vault 检索密钥时未经授权

问题描述 投票:0回答:1

我想使用 API 了解 Azure Key Vault 中存在的密钥。参考了此文档:(https://learn.microsoft.com/en-us/rest/api/keyvault/keys/get-keys/get-keys?tabs=HTTP) 使用此请求在我的电脑中获取不记名令牌:-

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

但是调用 API 失败,并显示 401 未经授权的消息: { “错误”: { "code": "未经授权", "message": "AKV10022:无效受众。预期为 https://vault.azure.net,发现为:https://management.azure.com。" } }

任何人都遇到过类似的问题,并使用 API 成功列出了密钥保管库中的密钥。

PS:我可以在 CLI 和 Powershell 中获取密钥,但我想从 API 中获取相同的密钥

CLI -

az keyvault key list --vault-name mykeyvault

Powershell -

Get-AzKeyVaultKey -VaultName 'mykeyvault'

azure-keyvault azure-rest-api
1个回答
0
投票

当您使用错误范围来生成 访问令牌。要解决错误,请将范围更改为https://vault.azure.net/.default

就我而言,我注册了一个 Azure AD 应用程序并添加了 API 权限,如下所示:

enter image description here

确保向 Key Vault 下的服务主体授予适当的 RBAC 角色,例如 Key Vault 管理员,如下所示:

enter image description here

现在,我使用下面的 curl 命令通过替换范围生成了访问令牌:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=client_credentials&client_id=appId&client_secret=secret&scope=https%3A%2F%2Fvault.azure.net%2F.default' https://login.microsoftonline.com/tenant/oauth2/v2.0/token

回复:

enter image description here

当我使用此令牌通过 Postman 调用 API 时,我成功获得了 keylist 响应,如下所示:

GET https://srikv23.vault.azure.net//keys?&api-version=7.4

回复:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.