密钥保险库返回401,带有访问令牌(MSI PowerShell功能应用程序)

时间:2018-03-15 23:31:08

标签: powershell azure azure-functions azure-keyvault

我正在尝试使用 PowerShell Azure功能连接到 Keyvault 。 托管服务标识(MSI)已打开,在Keyvault中,我授予了MSI“获取”和“列表”访问策略。 使用下面的脚本我成功获得了访问令牌,但是当我向Keyvault发出请求时,我总是收到401响应。

$vaultName = $Env:KeyVaultName
$vaultSecretName = $Env:VaultSecretName

$tokenAuthURI = $Env:MSI_ENDPOINT + "?resource=https://vault.azure.net/&api-version=2017-09-01"
$tokenResponse = Invoke-RestMethod -Method Get -Headers @{"Secret"="$env:MSI_SECRET"} -Uri $tokenAuthURI
$accessToken = $tokenResponse.access_token

$headers = @{ 'Authorization' = "Bearer $accessToken" }
$queryUrl = "https://$vaultName.vault.azure.net/keys/" +$vaultSecretName + "?api-version=2016-10-01"

$keyResponse = Invoke-RestMethod -Method GET -Uri $queryUrl -Headers $headers

知道为什么令牌不够?

1 个答案:

答案 0 :(得分:8)

尝试将资源URI更改为https://vault.azure.net(不带斜杠)。服务器上的令牌验证需要与401响应的WWW-Authenticate头中返回的完全相同的字符串。通常,密钥保险库会在令牌丢失或验证失败的情况下返回401(三种常见情况是令牌已过期,资源URI不正确,或者由与保管库关联的其他租户发出)。