【问题标题】:AzureServiceTokenProvider Exception: Tried to get token using Managed Service Identity. An error occurred while sending the requestAzureServiceTokenProvider 异常:尝试使用托管服务标识获取令牌。发送请求时出错
【发布时间】:2019-06-23 13:48:39
【问题描述】:

我正在尝试使用用户定义的 MSI 来获取身份验证令牌,然后连接到 SQL 数据库。

到目前为止我看到的步骤;

  1. 创建用户定义的托管标识 --> 完成
  2. 使用 AzureServiceTokenProvider 获取身份验证令牌 --> 这是我得到错误/异常的地方
  3. 将使用 AzureServiceTokenProvider 接收的身份验证令牌用于 SQLConnection。
  4. 执行 ADO.Net 或 EF 操作。

我在我的 Azure 订阅中创建了一个用户定义的托管标识。然后我开始编写一个简单的代码来使用 AzureServiceTokenProvider 获取访问令牌。代码如下;

static void Main(string[] args)
    {
        try
        {
            //var tokenProviderConnectionString = "RunAs=Developer; DeveloperTool=VisualStudio";
            var tokenProviderConnectionString = "RunAs=App;AppId=bbda13b3-b948-4d02-91bb-31f198729887";

            //var azureResource = "https://management.azure.com/";
            var azureResource = "https://database.windows.net/";


            Console.WriteLine("Attempting to gain access token from Azure...");
            var azureServiceTokenProvider = new AzureServiceTokenProvider(tokenProviderConnectionString);
            string accessToken = azureServiceTokenProvider.GetAccessTokenAsync(azureResource, "<<My Tenant ID>>").GetAwaiter().GetResult();
            Console.WriteLine("Successful");
            Console.WriteLine($"Access Token: {accessToken}");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error");
            Console.WriteLine(ex.ToString());
        }

    }

string accessToken = azureServiceTokenProvider.GetAccessTokenAsync(azureResource, "89cda43f-eb76-413b-bcbf-5c9b17542338").GetAwaiter().GetResult(); 出现错误。

例外是

Parameters: Connection String: RunAs=App;AppId=bbda13b3-b948-4d02-91bb-31f198729887, Resource: https://database.windows.net/, Authority: https://login.microsoftonline.com/<<My Tenant ID>>. Exception Message: Tried to get token using Managed Service Identity. Access token could not be acquired. An error occurred while sending the request.

如果我使用var tokenProviderConnectionString = "RunAs=Developer; DeveloperTool=VisualStudio"; 作为连接字符串,那么我可以获取访问令牌,因为它使用我的 Visual Studio 登录作为 MSI。 但是当我使用var tokenProviderConnectionString = "RunAs=App;AppId=bbda13b3-b948-4d02-91bb-31f198729887"; 时,我得到了上面提到的异常。我认为 AzureServiceTokenProvider 中可能存在错误,或者我在请求中遗漏了某些内容。

任何指针?

【问题讨论】:

  • 您的问题有最新进展吗?

标签: c# azure


【解决方案1】:

您需要使用该 AppId 和密码登录 Azure

az login --service-principal --tenant xxx --username bbda13b3-b948-4d02-91bb-31f198729887 --password xxx

然后当 AzureServiceTokenProvider 请求一个令牌时,它将是有效的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2014-09-08
    • 2022-11-07
    • 2012-03-07
    相关资源
    最近更新 更多