Я создаю приложение dotnet core 2.1 и пытаюсь использовать AutomationManagementClient для получения статуса заданий автоматизации Azure.
Я использую конструктор AutomationManagementClient, который принимает Microsoft.Rest.ServiceClientCredentials (https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.automation.automationclient.-ctor?view=azure-dotnet#Microsoft_Azure_Management_Automation_AutomationClient__ctor_Microsoft_Rest_ServiceClientCredentials_System_Net_Http_DelegatingHandler___)
Согласно документации (https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.resourcemanager.fluent.authentication.azurecredentials?view=azure-dotnet) AzureCredentials является реализацией Microsoft.Rest.ServiceClientCredentials.
Для построения ServiceClientCredentials я использую следующий код:
AuthenticationContext authContext = new AuthenticationContext(string.Format ("https://login.windows.net/{0}", tenantID)); AuthenticationResult tokenAuthResult = authContext.AcquireTokenAsync(applicationId, new ClientCredential(applicationId, authenticationKey)).Result; TokenCredentials cred = new TokenCredentials(tokenAuthResult.AccessToken); return new AutomationManagementClient(cred);
Однако в последней строке я получаю сообщение об ошибке cannot convert from 'Microsoft.Rest.TokenCredentials' to 'Microsoft.Azure.SubscriptionCloudCredentials'
cannot convert from 'Microsoft.Rest.TokenCredentials' to 'Microsoft.Azure.SubscriptionCloudCredentials'
Есть идеи, что я здесь не так делаю?
Спасибо,
У вас есть две проблемы:
Вы будете вызывать API управления Azure, поэтому ресурс, который вы указываете в AcquireTokenAsync, должен быть не вашим собственным идентификатором приложения, а идентификатором ресурса, для которого вы хотите токен: https://management.azure.com:
AcquireTokenAsync
https://management.azure.com
AuthenticationResult tokenAuthResult = authContext.AcquireTokenAsync( "https://management.azure.com", new ClientCredential(applicationId, authenticationKey)).Result;
Как упоминается в сообщении об ошибке, которое вы цитируете, конструктор AutomationManagementClient ожидает экземпляр SubscriptionCloudCredentials, а не экземпляр ServiceClientCredentials (документы, на которые вы ссылаетесь, предназначены для AutomationClient, а не для AutomationManagementClient). Ближе всего к тому, что вы пытаетесь сделать, будет TokenCloudCredentials (для которого вам также необходимо предоставить идентификатор подписки):
AutomationManagementClient
SubscriptionCloudCredentials
ServiceClientCredentials
AutomationClient
TokenCloudCredentials
TokenCloudCredentials cred = new TokenCloudCredentials( subscriptionId, tokenAuthResult.AccessToken);