我正在尝试使用用户定义的MSI获取身份验证令牌,然后连接到SQL数据库。
到目前为止我看到的步骤;
我在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中可能存在错误,或者请求中缺少某些内容。
有指针吗?
答案 0 :(得分:0)
您需要使用该AppId和密码登录到Azure
az login --service-principal --tenant xxx --username bbda13b3-b948-4d02-91bb-31f198729887 --password xxx
然后,当AzureServiceTokenProvider请求令牌时,它将是有效的。