2016-06-01 5 views
0

Azure VMをプログラムで(管理証明書を使用して)起動しようとしています。 httpリクエストを処理しようとしているときにこのエラーが表示された:401 Unauthorized。 (証明書が間違っているときに表示されるエラーではありません)。同じサブスクリプション(ホストされたサービスのリスト)への他のリクエストを試してみました。問題は、仮想マシンで作業する場合にのみ表示されるようです。何が間違っているのか分かりません。ここでは、コードがあります:あなたはX509証明書とAzure Resource Manager (ARM) APIリクエストを承認/認証しようとしているので、Azure仮想マシンとREST APIに問題がある

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

リクエストを表示できますか?フィドラーなどを使って見逃したことがあるようです。 –

+0

@AlexBelotserkovskiyあなたが求めていることはありますか? http://puu.sh/pcLm4/aed3966230.png –

+0

承認ヘッダーが必要だと言われていますが、どちらが1つですか? –

答えて

2

あなたはこのエラーを取得している理由があります。 ARM APIの承認にはAzure AD based authorization tokenが必要です。 ARM APIリクエストの認証/承認については、https://msdn.microsoft.com/en-us/library/azure/dn790557.aspxのこのリンクを参照してください。

X509証明書ベースの認証/許可は、従来のサービス管理API要求に対してのみ機能します。

+0

ありがとう!出来た :) –

関連する問題