【问题标题】:Authenticating to Microsoft.Azure.Management.Automation.AutomationManagementClient without using management certificates在不使用管理证书的情况下向 Microsoft.Azure.Management.Automation.AutomationManagementClient 进行身份验证
【发布时间】:2019-11-08 05:27:32
【问题描述】:

我正在构建一个 dotnet core 2.1 应用并尝试使用 AutomationManagementClient 来获取 Azure 自动化作业的状态。

我正在使用接受 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___) 的 AutomationManagementClient 的构造函数

根据文档 (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'

知道我在这里做错了什么吗?

谢谢,

【问题讨论】:

    标签: c# azure .net-core azure-active-directory azure-automation


    【解决方案1】:

    你有两个问题:

    1. 您将调用 Azure 管理 API,因此您在 AcquireTokenAsync 中标识的资源不应是您自己的应用 ID,而是您想要为其获取令牌的资源的标识符:https://management.azure.com

      AuthenticationResult tokenAuthResult = authContext.AcquireTokenAsync(
              "https://management.azure.com",
              new ClientCredential(applicationId, authenticationKey)).Result;    
      
    2. 正如您引用的错误消息中提到的,AutomationManagementClient 构造函数需要SubscriptionCloudCredentials 的实例,而不是ServiceClientCredentials 的实例(您链接到的文档是针对AutomationClient,而不是针对AutomationManagementClient )。与您尝试做的最接近的是TokenCloudCredentials(您还需要向其提供订阅 ID):

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

    【讨论】:

      猜你喜欢
      • 2017-09-30
      • 2023-03-29
      • 2017-08-17
      • 1970-01-01
      • 2016-12-15
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      相关资源
      最近更新 更多