Аутентификация в Microsoft.Azure.Management.Automation.AutomationManagementClient без использования сертификатов управления - PullRequest
0 голосов
/ 26 июня 2019

Я создаю приложение 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'

Есть идеи, что я здесь не так делаю?

Спасибо,

1 Ответ

1 голос
/ 26 июня 2019

У вас есть две проблемы:

  1. Вы будете вызывать API управления Azure, поэтому ресурс, который вы указываете в AcquireTokenAsync, должен быть не вашим собственным идентификатором приложения, а идентификатором ресурса, для которого вы хотите токен: https://management.azure.com:

    AuthenticationResult tokenAuthResult = authContext.AcquireTokenAsync(
            "https://management.azure.com",
            new ClientCredential(applicationId, authenticationKey)).Result;    
    
  2. Как упоминается в сообщении об ошибке, которое вы цитируете, конструктор AutomationManagementClient ожидает экземпляр SubscriptionCloudCredentials, а не экземпляр ServiceClientCredentials (документы, на которые вы ссылаетесь, предназначены для AutomationClient, а не для AutomationManagementClient). Ближе всего к тому, что вы пытаетесь сделать, будет TokenCloudCredentials (для которого вам также необходимо предоставить идентификатор подписки):

    TokenCloudCredentials cred = new TokenCloudCredentials(
            subscriptionId, tokenAuthResult.AccessToken);
    
...