AzureServiceTokenProvider异常:尝试使用托管服务身份获取令牌。发送请求时发生错误

时间:2019-06-23 13:48:39

标签: c# azure

我正在尝试使用用户定义的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中可能存在错误,或者请求中缺少某些内容。

有指针吗?

1 个答案:

答案 0 :(得分:0)

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

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

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