如何获取Azure自动化客户端的证书

时间:2018-02-07 07:25:28

标签: asp.net-mvc azure asp.net-mvc-4 azure-automation

我需要为Azure webhook创建自动化客户端。

以下代码由我编写,以获取AutomationManagementClient Value。

var cert = new X509Certificate2(Convert.FromBase64String(ConfigurationManager.AppSettings["CertBase64String"]));

  var creds[![enter image description here][1]][1] = new CertificateCloudCredentials(ConfigurationManager.AppSettings["SubscriptionId"], cert);

  AutomationManagementClient automationManagementClient = new AutomationManagementClient(creds);

我需要证书字符串,即 CertBase64String 值,因为我不知道从哪里获得该值。 帮帮我...

根据您的回答更新后我会收到此错误。

enter image description here

2 个答案:

答案 0 :(得分:1)

如果您想创建自动化客户端,我建议您尝试使用ARM方式来操作自动化。以下是演示代码在我身边正常工作。

准备:注册一个AD应用程序并为applcation分配角色,更多详情请参阅Azure官方tutorials。之后,我们可以从Azure门户获取tenantId,appId,secretKey。

我们可以使用以下代码来获取令牌

 var tenantId = "tenantId";
 var context = new AuthenticationContext($"https://login.windows.net/{tenantId}");
 var clientId = "application Id";
 var clientSecret = "client secret";
 var resourceGroup = "resource group";
 var automationAccount = "automationAccount";
 var subscriptionId = "susbscriptionId";
 var token = context.AcquireTokenAsync(
                "https://management.azure.com/",
                new ClientCredential(clientId, clientSecret)).Result.AccessToken;

如果您使用Microsoft.Azure.Management.Automation版本< = 2.0.4,请尝试以下代码。

  var automationClient = new AutomationManagementClient(new TokenCloudCredentials(subscriptionId,token));
  var webhook = automationClient.Webhooks.CreateOrUpdate(resourceGroup, automationAccount,new WebhookCreateOrUpdateParameters
                {
                   Properties =  new WebhookCreateOrUpdateProperties
                   {
                       ExpiryTime = DateTimeOffset.Now.AddDays(1),
                       IsEnabled = false,
                       Parameters = parameters,
                       Runbook = new RunbookAssociationProperty
                       {
                           Name = "xxxx"
                       },
                       Name = "xxxx",
                       Uri = "https://xxxx.xx"

                   } 
                });

如果使用Microsoft.Azure.Management.Automation Version 3.0.0-preview,请尝试以下情况。

 var automationClient = new AutomationClient(new TokenCredentials(token)) {SubscriptionId = subscriptionId};
 var webhook = automationClient.Webhook.CreateOrUpdate(resourceGroup, automationAccount, "webhookName",
  new WebhookCreateOrUpdateParameters
   {
      ExpiryTime = DateTime.Now.AddDays(1),
      IsEnabled = false,
      Parameters = parameters,
      Name = "xxxxx",
      Runbook = new RunbookAssociationProperty
      {
           Name = "xxxxx"
      },
      Uri = "https://xxx.xxx"


  });

<强>更新

您可以设置 Parameters = null ,或者如果您有参数,则可以将参数定义为字典。另请在代码中添加 Name =“xxxx”

var parameters = new Dictionary<string, string> {{"test", "test"}};

var webhook = automationClient.Webhooks.CreateOrUpdate(resourceGroup, automationAccount,new WebhookCreateOrUpdateParameters
                {
                   Properties =  new WebhookCreateOrUpdateProperties
                   {
                       ExpiryTime = DateTimeOffset.Now.AddDays(1),
                       IsEnabled = false,
                       Parameters = parameters,
                       Runbook = new RunbookAssociationProperty
                       {
                           Name = "xxxx"
                       },
                       Name = "xxxx",
                       Uri = "https://xxxx.xx"

                   } 
                });

我在我身边测试它,它正常工作

enter image description here

答案 1 :(得分:0)

&#34; CertBase64String&#34;通过将该证书的拇指印刷传递给以下功能。

internal static X509Certificate2 GetCertificateFromthumbPrint(String certThumbPrint) {
  X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);

  certStore.Open(OpenFlags.ReadOnly);
  //Find the certificate that matches the thumbprint.
  X509Certificate2Collection certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, certThumbPrint, false);
  certStore.Close();

  //Get the first cert with the thumbprint
  X509Certificate2 cert = (certCollection.Count > 0) ? certCollection[0] : null;
  return cert;
}