具有访问令牌的 Key Vault returns 401(MSI PowerShell 函数应用程序)

Key Vault returns 401 with access token (MSI PowerShell Function App)

我正在尝试使用 PowerShell 通过我的 A​​zure 函数 连接到 Keyvault。 托管服务标识 (MSI) 已打开,在 Keyvault 中,我授予 MSI 'get' 和 'list' 访问策略。 使用下面的脚本我成功获得了访问令牌,但是当我向 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

知道令牌不足的原因吗?

尝试将资源 URI 更改为 https://vault.azure.net(没有尾部斜杠)。服务器上的令牌验证需要与 401 响应的 WWW-Authenticate header 中的 returns 完全相同的字符串。通常,对于令牌丢失或验证失败的情况,Key Vault returns 401(三种常见情况是令牌已过期、资源 URI 不正确或由与保管库关联的租户不同的租户颁发).