gpt4 book ai didi

c# - Azure API 服务器无法验证请求

转载 作者:太空狗 更新时间:2023-10-29 20:04:37 26 4
gpt4 key购买 nike

我有一个任务(我尝试使用辅助角色并上传控制台应用程序并运行 .exe),该任务应该每天运行一次并收集我的一些虚拟机的 Azure 指标。这在本地工作完美,但在云服务上我收到此错误:

Unhandled Exception: Microsoft.WindowsAzure.CloudException: ForbiddenError: The server failed to authenticate the request. Verify that the certificate is valid and associated with this subscription. at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSucces ... etc.

发生这种情况的行是:

MetricDefinitionListResponse metricListResponse = metricsClient.MetricDefinitions.List(resourceId, null,
nspace);

这是我的代码的一部分:

 string subscriptionId = "fc4xxxx5-835c-xxxx-xxx-xxxxxxx";

// The thumbprint of the certificate.
string thumbprint = "‎f5 b4 xxxxxxxx f7 c2";

// Get the certificate from the local store.
//X509Certificate2 cert = GetCertificate(StoreName.My, StoreLocation.LocalMachine, thumbprint);
//cert = GetCertificate(StoreName.My, StoreLocation.CurrentUser, thumbprint) ?? new X509Certificate2(("manageAzure.cer"));
var cert = new X509Certificate2(("manageAzure.cer"));

Console.WriteLine("Certificate is : " + cert);

// Create the metrics client.
var metricsClient = new MetricsClient(new CertificateCloudCredentials(subscriptionId, cert));

Console.WriteLine("metricsClient is : " + metricsClient);

// The cloud service name and deployment name, found in the dashboard of the management portal.
string cloudServiceName = "abms2-carlsberg";
string deploymentName = "abms2-carlsberg";

// Build the resource ID string.
string resourceId = ResourceIdBuilder.BuildVirtualMachineResourceId(cloudServiceName, deploymentName);

string nspace = "WindowsAzure.Availability";

// Get the metric definitions.
MetricDefinitionListResponse metricListResponse = metricsClient.MetricDefinitions.List(resourceId, null,
nspace);

我已将管理证书放入我的解决方案中,并从那里加载它(它设置为始终复制),并且与我在本地运行它时使用的相同(且方式相同)。

那么它提示“验证”什么“证书”?我似乎看不出问题所在。任何帮助将不胜感激,因为我花了整个下午的时间!

PS:我已经在提升模式下运行它了!

最佳答案

对于可能遇到此问题的其他人,我已按照底部的说明解决了该问题:( http://www.dinohy.com/post/2013/11/12/403-Forbidden-when-Use-Azure-Management-REST-API-on-Role-instance.aspx )

  1. 从以下位置下载发布设置文件:https://manage.windowsazure.com/publishsettings/index?client=vs&schemaversion=2.0 (这是一个XML文件,可以用记事本打开)

  2. 查找 ManagementCertificate 属性,将值复制到字符串。表示一个Base64编码的字符串,可以使用这个字符串创建一个证书: string base64Cer="The value of ManagementCertificate "

  3. 使用此字符串创建证书。 var 证书 = 新 X509Certificate2(base64Cer);

虽然最后一步并不完全像直接传递字符串(因为字符串太长会导致异常),而是如下所示:var cert = new X509Certificate2(Convert.FromBase64String(base64cer));

希望这也能帮助处于我这个位置的其他人。

关于c# - Azure API 服务器无法验证请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24999518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com