通过REST使用服务对服务访问令牌访问Azure密钥保管库

通过REST使用服务对服务访问令牌访问Azure密钥保管库,azure,azure-active-directory,azure-keyvault,Azure,Azure Active Directory,Azure Keyvault,我无法获得使用我的应用程序(而不是通过用户登录)访问Azure Key Vault的足够权限。以下是我的设置: 我有azure密钥保险库设置: 我已经给了我名为“KeyVault”的应用程序所有权限 我的应用已在Azure Active Directory中注册。我已经允许它进入钥匙库: 在此之后,我尝试使用以下REST API获取访问令牌: https://login.microsoftonline.com/<DOMAIN_ID>/oauth2/token https://

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

我有azure密钥保险库设置:

我已经给了我名为“KeyVault”的应用程序所有权限

我的应用已在Azure Active Directory中注册。我已经允许它进入钥匙库:

在此之后,我尝试使用以下REST API获取访问令牌:

https://login.microsoftonline.com/<DOMAIN_ID>/oauth2/token
https://login.microsoftonline.com//oauth2/token
client_id和resource都是我之前在Active Directory中注册的应用的应用id。(这是正确的吗?)

我确实得到了一个访问令牌,我用它来查询我的保险库中的一个秘密。不幸的是,正如您所看到的,它返回了一个401错误,这是不允许的。我做错了什么


URL来自密钥库中密钥的“机密标识符”。

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


这将确保返回的令牌“寻址”到密钥保管库。

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

这将确保返回的令牌被“寻址”到密钥库

客户端id和资源都是我在中注册的应用的应用id 我之前展示的Active Directory

不,资源id不是应用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 Power Shell
-debug
来获取它。例如:

客户端id和资源都是我在中注册的应用的应用id 我之前展示的Active Directory

不,资源id不是应用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 Power Shell
-debug
来获取它。例如:


我还使用Postman来测试它,它对我也很有效。这是测试结果<代码>令牌<代码>结果我还使用Postman来测试它,它对我也有效。这是测试结果<代码>令牌<代码>结果您能否提供有关如何执行此操作的更多详细信息