如何使用REST Api在Windows Azure中列出管理证书

时间:2012-10-10 05:27:29

标签: azure

我想列出windows azure订阅中的所有管理证书。我尝试使用以下代码。但它给了我一个例外。我发现response为空,异常消息为"The remote server returned an error: (403) Forbidden."

请帮我解决这个问题。 Msdn没有为此提供示例:(

using System;
using System.Collections.Generic;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Xml;
using System.Xml.Linq;

class ManagemenCertificateViewer
{
    public static void Runme()
    {
        string msVersion = "2012-03-01";
        string subscriptionId = "I used the subscription Id here";
        try
        {
            ListManagementCertificates(subscriptionId, msVersion);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception caught: ");
            Console.WriteLine(ex.Message);
        }
    }

    private static void ListManagementCertificates(string subscriptionId, string version)
    {
        string uriFormat = "https://management.core.windows.net/{0}/certificates";
        Uri uri = new Uri(string.Format(uriFormat, subscriptionId));

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
        request.Method = "GET";
        request.Headers.Add("x-ms-version", version);
        request.ContentType = "application/xml";

        XDocument responseBody = null;
        HttpStatusCode statusCode;
        HttpWebResponse response;
        try
        {
            response = (HttpWebResponse)request.GetResponse();
        }
        catch (WebException ex)
        {
            // GetResponse throws a WebException for 400 and 500 status codes
            response = (HttpWebResponse)ex.Response;
        }
        statusCode = response.StatusCode;
        if (response.ContentLength > 0)
        {
            using (XmlReader reader = XmlReader.Create(response.GetResponseStream()))
            {
                responseBody = XDocument.Load(reader);
            }
        }
        response.Close();
        if (statusCode.Equals(HttpStatusCode.OK))
        {
            XNamespace wa = "http://schemas.microsoft.com/windowsazure";
            XElement storageServices = responseBody.Element(wa + "SubscriptionCertificates");
            int mngmntCertificateCount = 0;
            foreach (XElement storageService in storageServices.Elements(wa + "SubscriptionCertificate"))
            {
                string publicKey = storageService.Element(wa + "SubscriptionCertificatePublicKey").Value;
                string thumbprint = storageService.Element(wa + "SubscriptionCertificateThumbprint").Value;
                string certificateData = storageService.Element(wa + "SubscriptionCertificateData").Value;
                string timeCreated = storageService.Element(wa + "TimeCreated").Value;
                Console.WriteLine(
                    "Certificate[{0}]{1}  SubscriptionCertificatePublicKey: {2}{1}  SubscriptionCertificateThumbprint: {3}{1} certificateData{4}{1} timeCreated{5}{1}",
                    mngmntCertificateCount++, Environment.NewLine, publicKey, thumbprint, certificateData, timeCreated);
            }
        }
        else
        {
            Console.WriteLine("List Management certificates returned an error:");
            Console.WriteLine("Status Code: {0} ({1}):{2}{3}",
                (int)statusCode, statusCode, Environment.NewLine,
                responseBody.ToString(SaveOptions.OmitDuplicateNamespaces));
        }
        return;
    }
}

2 个答案:

答案 0 :(得分:3)

感谢它按我的预期工作。我只需添加以下行和方法'GetCertificate(arg1)'

request.ClientCertificates.Add(GetCertificate(certThumbprint));

还有一件事,在Msdn帮助指南中有一个名为

的回复正文中的标记
<TimeCreated>time-created</TimeCreated>

但api没有回应它刚刚创建的TimeCreated。

<Created> ..... </Created>

答案 1 :(得分:1)

403错误表示用于验证Service Management API请求的管理证书有问题。我没有看到您在代码中附上管理证书以及您的请求。您可能会发现此链接对于验证服务管理API请求非常有用:http://msdn.microsoft.com/en-us/library/windowsazure/ee460782

HTH。

相关问题