我在我的应用程序中使用azure服务管理REST API。我在azure上传了管理证书,并在当地有一份副本。 我将认证保存在应用程序本身的单独文件夹(AzureCertificate)中并引用该位置。 e.g:
string certificatePath = Server.MapPath("〜/ AzureCertificate /")+ certificateName;
X509Certificate2 certificate = new X509Certificate2(certificatePath);
AzureCertificate - 文件夹名称certificateName - MyCertificatieName.cer
当我运行应用程序我的本地开发环境时,它工作正常。但是当我在azure网站上部署相同的错误时,我收到了以下错误。
远程服务器返回错误:(403)禁止
这是我提出请求的方式
string uri = apiURL + subscriptionId +" / services / hostedservices";
HttpWebRequest req =(HttpWebRequest)HttpWebRequest.Create(uri);
X509Certificate2 certificate = new X509Certificate2(certificatePath);
req.ClientCertificates.Add(证书);
req.Headers.Add(" x-ms-version"," 2009-10-01"); HttpWebResponse res =
(HttpWebResponse)req.GetResponse();
但它会在最后一行抛出上述异常(req.GetResponse())。
我们可以这样使用管理证书吗?
我的要求是开发一个使用azure REST API并在azure中部署的应用程序。
答案 0 :(得分:1)
我还发现,使用Management API正确创建证书非常重要 - 在我使用此脚本创建证书之前,我收到了403错误:
makecert -r -pe -a sha1 -n "CN=Windows Azure Authentication Certificate" -ss my -len 2048 -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" -sy 24 ManagementApiCert.cer
我在这里得到了:http://blogs.msdn.com/b/davidhardin/archive/2013/08/27/azure-management-certificate-public-key-private-key.aspx这已经有几年了,但是当我试过的其他更新的那些没有为我工作时。
此外,请确保您在门户网站的“设置”中的“管理证书”下上载证书,它不是SSL或远程访问证书。
答案 1 :(得分:0)
我建议使用Azure管理SDK。您可以从名为 Microsoft.WindowsAzure.Management 的nuget包安装它,并使用适当的类/方法来执行您想要执行的操作。
如果你 需要通过HTTP和REST API直接做某事,我建议使用HttpClient
而不是HttpWebRequest
。 (HttpClient
是另一个名为 Microsoft.Net.Http 的nuget包。然后您可以使用SubscriptionCloudCredntials
(通过ManagementClient.Credentials
属性)为您填充HTTP请求例如:
var client = new ManagementClient(
new CertificateCloudCredentials(subscriptionId, certificate));
//...
var requestMessage = new HttpRequestMessage(HttpMethod.Get, apiURL);
await client.Credentials.ProcessHttpRequestAsync(requestMessage,
CancellationToken.None);
var httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.SendAsync(requestMessage);
// TODO: process response, maybe:
var responseText = response.AsString();
我建议您尽可能使用client
。