【问题标题】:Having problems with Azure virtual machines and REST apiAzure 虚拟机和 REST api 出现问题
【发布时间】:2016-06-01 13:36:09
【问题描述】:

我正在尝试以编程方式启动 Azure VM(使用管理证书)。尝试处理 http 请求时出现此错误:错误 401 未经授权。 (这不是证书错误时出现的错误)。尝试了对同一订阅的其他请求(列出托管服务)- 一切正常,似乎问题仅在我尝试使用虚拟机时出现。不知道我在做什么错。代码如下:

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

【问题讨论】:

  • 你能显示请求吗?使用提琴手或类似的东西。好像漏掉了什么。
  • @AlexBelotserkovskiy 这就是你一直要求的吗? puu.sh/pcLm4/aed3966230.png
  • 它说我需要授权标头,但是哪个?

标签: rest azure authentication virtual-machine


【解决方案1】:

您收到此错误的原因是您尝试使用 X509 证书对 Azure Resource Manager (ARM) API 请求进行身份验证/授权。 ARM API 的授权需要Azure AD based authorization token。请参阅此链接以验证/授权 ARM API 请求:https://msdn.microsoft.com/en-us/library/azure/dn790557.aspx。

基于 X509 证书的身份验证/授权仅适用于经典服务管理 API 请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2019-12-13
    • 2017-01-02
    相关资源
    最近更新 更多