내보내기(0) 인쇄
모두 확장

서비스 관리 요청 인증

업데이트 날짜: 2011년 7월

Windows Azure 서비스 관리 API는 SSL을 통한 관리 인증서의 상호 인증을 사용하여 서비스에 대해 수행된 요청에 대한 보안을 설정합니다. 익명 요청은 허용되지 않습니다.

note참고
이 항목에서는 기존 관리 인증서를 사용하여 서비스 관리 API에 대한 요청을 인증하는 방법에 대해 설명합니다. Windows Azure의 관리 인증서에 대해 잘 모르는 경우 Windows Azure에서 인증서 관리를 참조하십시오.

서비스 관리 API를 사용한 요청을 수행하려면 구독에 관리 인증서가 연결되어 있어야 합니다. 구독이 여러 개이고 동일한 관리 인증서를 사용하여 각 구독에 대한 요청을 인증하려는 경우 각 구독에 인증서가 연결되어 있어야 합니다. 관리 인증서를 구독에 추가한 후 해당 인증서로 요청에 서명하여 서비스에 대한 요청을 인증할 수 있습니다. 관리 인증서를 만들고 구독에 연결하는 방법에 대한 자세한 내용은 Windows Azure용 관리 인증서 만들기 및 업로드를 참조하십시오.

서비스 관리 API를 사용하는 응용 프로그램을 디자인할 때 관리 인증서에 관한 다음 사항에 유의하십시오.

  • 서비스 관리 API는 인증서가 여전히 유효한지 확인하지 않으므로 만료된 인증서에 대한 인증도 성공하게 됩니다.

  • 모든 관리 인증서는 동일한 권한 집합을 가지고 있습니다. 동일한 구독에서 역할마다 서로 다른 관리 인증서를 구성할 수 있는 "역할 기반" 인증의 개념이 없습니다.

관리 서비스 요청에 인증서 연결

관리 서비스를 사용하여 요청을 인증하려면 요청에 인증서를 연결해야 합니다. 이 섹션에서는 C#과 System.NetSystem.Security.Cryptography.X509Certificates 라이브러리를 사용하여 관리 서비스에 대한 요청을 인증하는 방법을 보여 줍니다.

샘플 코드 조각은 서비스 관리 API의 클라우드 서비스 나열 작업을 대상으로 하는 HttpWebRequest 개체를 만듭니다. 이 코드에는 다음 네임스페이스가 필요합니다.

using System.Net;

모든 서비스 관리 요청에는 구독 ID가 필요합니다. 여기에서는 이해를 돕기 위해 가상 ID가 제공되었습니다.


            // Values for the subscription ID and List Hosted Services operation.
            // 
            string subscriptionId = "a01234b5c-d6e7-8f9g-h0123-4567i890j1k";

            // The opperation to be performed. This value can be modified to reflect the operation being performed.
            string operationName = "hostedservices";

            // Build a URI for https://management.core.windows.net/<subscription-id>/services/<operation-type>
            Uri requestUri = new Uri("https://management.core.windows.net/"
                                    + subscriptionId
                                    + "/services/"
                                    + operationName);

            // Create the request and specify attributes of the request.
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUri);

            // Define the requred headers to specify the API version and operation type.
            request.Headers.Add("x-ms-version", "2010-10-28");
            request.Method = "GET";
            request.ContentType = "application/xml";

그 다음에는 요청에 인증서를 연결해야 합니다. 필요한 네임스페이스는 다음과 같습니다.

using System.IO;
using System.Security;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

다음 코드는 My라는 로컬 인증서 저장소를 열고 지문 값과 일치하는 인증서를 찾습니다. 그런 다음 일치하는 인증서를 HttpWebRequest 개체의 ClientCertificates 컬렉션에 추가하여 인증서를 요청에 연결합니다.


            // The thumbprint value of the management certificate.
            // You must replace the string with the thumbprint of a 
            // management certificate associated with your subscription.
            string certThumbprint = "33CE879AB4BC2683F6205C83A1BB376A4829695B";
         
            // Create a reference to the My certificate store.
            X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);

            // Try to open the store.
            try
            {
                certStore.Open(OpenFlags.ReadOnly);
            }
            catch (Exception e)
            {
                if (e is CryptographicException)
                {
                    Console.WriteLine("Error: The store is unreadable.");
                }
                else if (e is SecurityException)
                {
                    Console.WriteLine("Error: You don't have the required permission.");
                }
                else if (e is ArgumentException)
                {
                    Console.WriteLine("Error: Invalid values in the store.");
                }
                else
                {
                    throw;
                }
            }

            // Find the certificate that matches the thumbprint.
            X509Certificate2Collection certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, certThumbprint, false);
            certStore.Close();

            // Check to see if our certificate was added to the collection. If no, throw an error, if yes, create a certificate using it.
            if (0 == certCollection.Count)
            {
                throw new Exception("Error: No certificate found containing thumbprint " + certThumbprint);
            }

            // Create an X509Certificate2 object using our matching certificate.
            X509Certificate2 certificate = certCollection[0];

            // Attach the certificate to the request.
            request.ClientCertificates.Add(certificate);

URI와 인증서가 연결되었으므로 request 개체의 GetResponse() 메서드를 호출하여 요청을 실행할 준비가 되었습니다.


            try
            {
                // Make the call using the web request.
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // Display the web response status code.
                Console.WriteLine("Response status code: " + response.StatusCode);

                // Display the request ID returned by Windows Azure.
                if (null != response.Headers)
                {
                    Console.WriteLine("x-ms-request-id: "
                    + response.Headers["x-ms-request-id"]);
                    Console.ReadKey();
                }

                // Parse the web response.
                Stream responseStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(responseStream);

                // Display the raw response.
                Console.WriteLine("Response output:");
                Console.WriteLine(reader.ReadToEnd());
                Console.ReadKey();

                // Close the resources no longer needed.
                response.Close();
                responseStream.Close();
                reader.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

전체 코드 샘플 및 관리 서비스 요청 프로세스에 대한 설명은 Code Quick Start: Create a console application that lists your Windows Azure hosted services를 참조하십시오.

참고 항목

표시:
© 2014 Microsoft