【问题标题】:Key Vault returns 401 with access token (MSI PowerShell Function App)Key Vault 返回 401 和访问令牌(MSI PowerShell 函数应用程序)
【发布时间】:2018-08-24 22:36:21
【问题描述】:

我正在尝试使用 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

知道为什么令牌不够用吗?

【问题讨论】:

  • 如果要获取secret,需要使用queryUrl "https://$vaultName.vault.azure.net/secrets/" +$vaultSecretName + "?api-version=2016-10-01"。在您的情况下,您似乎试图获取密钥。您是否授予 MSI 'get' 和 'list' 访问策略来访问密钥?
  • @TomSun 感谢您注意到我错误地将keys 放在那里。一旦 Sean 帮助我通过了 401,错误消息也将我引导到那里:)

标签: powershell azure azure-functions azure-keyvault


【解决方案1】:

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

【讨论】:

  • 谢谢肖恩,这确实是问题所在。我从某个地方复制了代码,我会尝试找到它并注意它,这样其他人就不会遇到这种情况。
  • 我可能找到了与您相同的代码,这花了我 2 天的时间。
  • 微软!为什么?? :'(
猜你喜欢
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 2018-02-28
  • 2018-05-22
  • 2018-09-26
相关资源
最近更新 更多