【问题标题】:Get oauth token for Azure Key Vault获取 Azure Key Vault 的 oauth 令牌
【发布时间】:2024-01-16 08:16:01
【问题描述】:

按照以下教程尝试获取 Azure Key Vault 的 oauth2 令牌。

https://docs.microsoft.com/en-us/azure/key-vault/general/tutorial-net-windows-virtual-machine

在 Azure 中,我正在获取 oauth2 令牌端点并进行调用以获取令牌,但得到响应“您必须登录您的帐户”。令牌端点应该不同吗?如果是,在哪里找到?如果我使用正确的端点,那么如何解决这个问题,因为使用 Key Vault 的全部目的是让您不必在本地存储凭据

    static string GetToken()
    {
        WebRequest request = WebRequest.Create("https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token");
        request.Headers.Add("Metadata", "true");
        WebResponse response = request.GetResponse();
        return ParseWebResponse(response, "access_token");
    }

【问题讨论】:

  • 您是否按照您提供的教程进行操作?它表明当我们想要使用 azure VM 获取密钥库的令牌时,我们需要使用 WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net")。为什么使用WebRequest.Create("https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token")
  • 是的@HuryShen 我试过了,但是 URI 无法访问,应该用什么来代替“169.254.169.254”?

标签: azure azure-active-directory azure-keyvault azure-managed-identity


【解决方案1】:

根据上面的 cmets,您可能无法访问,因为您可能正试图从 azure 外部运行您的代码。端点 169.254.169.254 只能在 azure 内路由。 这意味着示例代码必须在 azure vm 中运行。

您没有指定尝试从哪里访问它,但是 如果您尝试从 azure Web 应用程序访问,则相关示例为 https://docs.microsoft.com/en-us/azure/key-vault/general/tutorial-net-create-vault-azure-web-app

如果您尝试从外部访问密钥库,您可能会创建一个应用注册,授予它访问密钥库的权限,例如 Can't Access Azure Key Vault from desktop console app

【讨论】:

  • 从本地访问。现在说得通了