簡體   English   中英

Azure虛擬機和REST API出現問題

[英]Having problems with Azure virtual machines and REST api

我正在嘗試以編程方式(使用管理證書)啟動Azure VM。 我在嘗試處理http請求時收到此錯誤:錯誤401未經授權。 (這不是證書錯誤時出現的錯誤)。 嘗試了對同一預訂的其他請求(列出托管服務)-正常,似乎僅當im tryin與虛擬機一起使用時問題才出現。 不知道我在做什么錯。 這是代碼:

 static void Main(string[] args)
    {
        Certificate = new X509Certificate2(Convert.FromBase64String(base64Cer));

        string uriFormat = "https://management.azure.com/subscriptions/{my_sub_id}/resourceGroups/{my_resourse_group}/providers/Microsoft.ClassicCompute/virtualMachines/{my_machine_name}/start?api-version={0}";

        Uri uri = new Uri(string.Format(uriFormat, Version));

        XDocument responseBody;
        HttpWebResponse response = InvokeRequest(uri, "POST", out responseBody);

        HttpStatusCode statusCode = statusCode = response.StatusCode;
        Console.WriteLine("The status of the operation: {0}\n\n", statusCode.ToString());
        Console.WriteLine(responseBody.ToString(SaveOptions.OmitDuplicateNamespaces));


        Console.Write("Press any key to continue:");
        Console.ReadKey();
    }

    private static HttpWebResponse InvokeRequest( Uri uri, string method, out XDocument responseBody)
    {
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
        request.Method = method;
        request.Headers.Add("x-ms-version", Version);
        request.ClientCertificates.Add(Certificate);
        request.ContentType = "application/json";
        request.ContentLength = 0;

        responseBody = null;
        HttpWebResponse response;
        try
        {
            response = (HttpWebResponse)request.GetResponse();
        }
        catch (WebException ex)
        {
            response = (HttpWebResponse)ex.Response;
        }
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.DtdProcessing = DtdProcessing.Ignore;
        if (response.ContentLength > 0)
        {
            using (XmlReader reader = XmlReader.Create(response.GetResponseStream(), settings))
            {
                try
                {
                    responseBody = XDocument.Load(reader);
                }
                catch
                {
                    responseBody = null;
                }
            }
        }
        response.Close();
        return response;
    }

出現此錯誤的原因是,您試圖通過X509證書對Azure Resource Manager (ARM) API請求進行身份驗證/授權。 ARM API Azure AD based authorization token需要Azure AD based authorization token 請參閱以下鏈接以認證/授權ARM API請求: https : //msdn.microsoft.com/en-us/library/azure/dn790557.aspx

基於X509證書的身份驗證/授權僅適用於經典服務管理API請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM