具有访问令牌的 Key Vault returns 401(MSI PowerShell 函数应用程序)
Key Vault returns 401 with access token (MSI PowerShell Function App)
我正在尝试使用 PowerShell 通过我的 Azure 函数 连接到 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 不正确或由与保管库关联的租户不同的租户颁发).
我正在尝试使用 PowerShell 通过我的 Azure 函数 连接到 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 不正确或由与保管库关联的租户不同的租户颁发).