通过 REST 使用服务到服务访问令牌访问 Azure Key Vault

Access Azure Key Vault using Service-to-Service Access Token via REST

我无法获得足够的权限来使用我的应用程序(而不是通过用户登录)访问 Azure Key Vault。这是我的设置:

我有一个 Azure Key Vault 设置:

我已经授予我名为 "KeyVault" 的应用所有权限。

我的应用已在 Azure Active Directory 中注册。我已授予它访问 Key Vault 的权限:

完成这一切后,我尝试使用以下 REST API 获取访问令牌:

https://login.microsoftonline.com/<DOMAIN_ID>/oauth2/token

client_id 和 resource 都是我之前在 Active Directory 中注册的应用程序的应用程序 ID。 (这是正确的吗?)

我确实得到了一个访问令牌,我用它来尝试查询我的保管库中的秘密。不幸的是,正如您所看到的 return 一个 401 错误,这是没有权限的。我做错了什么?

URL 来自密钥保管库中秘密的 "Secret Identifier"。

从 AAD 请求令牌时,您应该将资源设置为:

https://vault.azure.net

这将确保返回的令牌 'addressed' 到 Key Vault。

The client_id and resource are both the App ID of my registered app in Active Directory I showed earlier.

不对,资源id不是app id。正如 Rich 所说,值为 https://vault.azure.net.

我在实验室用 Power Shell 测试了它,代码应该如下所示:

$TENANTID=""
$APPID=""
$PASSWORD=""
$result=Invoke-RestMethod -Uri https://login.microsoftonline.com/$TENANTID/oauth2/token?api-version=1.0 -Method Post -Body @{"grant_type" = "client_credentials"; "resource" = "https://vault.azure.net"; "client_id" = "$APPID"; "client_secret" = "$PASSWORD" }
$token=$result.access_token

$url="https://shui.vault.azure.net/secrets/shui01/cea20d376aee4d25a2d714df19314c26?api-version=2016-10-01"

$Headers=@{
    'authorization'="Bearer $token"

}

Invoke-RestMethod  -Uri $url  -Headers $Headers -Method GET

注意:如果要获取API输入信息,可以使用Azure PowerShell-debug获取。例如: