【问题标题】:Azure Keyvault error: Tried the following 3 methods to get an access token, but none of them workedAzure Keyvault 错误:尝试了以下 3 种方法来获取访问令牌,但都没有奏效
【发布时间】:2020-06-22 12:48:27
【问题描述】:

我已将我的 WebAPI 配置为使用托管标识从 Azure KeyVault 获取 Azure 存储连接字符串。

为此,我创建了一个 Azure AD 专用用户,该用户有权从 Azure KeyVault 获取/列出机密。然后,我将此用户分配给我的 AZURE_USERNAME 环境变量,并且我已将 Visual Studio 配置为使用此帐户。

只要我在从 Visual Studio 调试时在 IIS Express 中运行 WebAPI,一切都可以正常工作。但是,当我在 Visuall Studio 中调试时,我想从本地 IIS 运行 WebApi。

我在这里缺少什么?我怀疑这是因为本地 IIS 无法使用上面配置的用户运行,但是解决方法是什么?

我得到的错误是

AzureServiceTokenProviderException: Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/some_id. Exception Message: Tried the following 3 methods to get an access token, but none of them worked.

【问题讨论】:

    标签: azure azure-storage azure-keyvault


    【解决方案1】:

    最后,我在 azure ad 中创建了一个专用服务主体,然后将其添加到我的应用程序的用户中。此服务主体由开发机器上的环境变量引用。

    【讨论】:

      【解决方案2】:

      我在这方面取得了进展,它现在可以在本地 IIS 中运行,但是...

      为了让它工作,我添加了以下环境变量:

      作为documented here

      但这意味着这一次仅适用于一个服务主体。如果我希望我的所有本地 WebApi 在本地 IIS 中同时运行(就是这种情况)怎么办。我该如何处理 DefaultAzureCredential

      【讨论】:

        【解决方案3】:

        另一种解决方案是通过传递将指定租户和应用程序机密的连接字符串参数来创建 AzureServiceTokenProvider 实例。

        var azureServiceTokenProvider = new AzureServiceTokenProvider("RunAs=App;AppId=2ad1fe1f-d93f-4973-a1e5-e7019638b90a;TenantId=your-tenant-here.onmicrosoft.com;AppKey=your-app-secret-here");
        

        这样就不再需要使用环境变量了。

        查看here

        【讨论】:

          猜你喜欢
          • 2019-03-28
          • 1970-01-01
          • 2019-06-29
          • 1970-01-01
          • 1970-01-01
          • 2015-12-08
          • 1970-01-01
          • 2022-01-05
          • 1970-01-01
          相关资源
          最近更新 更多