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

How to get certificate for Azure Automation Client

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

下面的代码是我写的,用来获取AutomationManagementClient的值。

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 值,因为我不知道从哪里可以得到那个值。 帮帮我...

根据您的回答更新后出现此错误。

如果你想制作自动化客户端,建议你尝试使用ARM方式来操作自动化。以下是我这边正确运行的演示代码。

准备:注册一个AD应用程序并为应用程序分配角色,更多细节请参考Azure官方tutorials。之后我们可以从Azure Portal获取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"

                   } 
                });

我自己测试了一下,它工作正常

"CertBase64String" 将通过将该证书的指纹传递给以下函数来获取。

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;
}