エクスポート (0) 印刷
すべて展開

サービス管理要求の認証

更新日: 2011年7月

Windows Azure サービス管理 API では、サービスに対して行われた要求が安全であることを保証するために、SSL を介した管理証明書の相互認証が必要です。匿名の要求は許可されません。

note
このトピックでは、サービス管理 API に対する要求を既存の管理証明書を使用して認証する方法について説明します。Windows Azure の管理証明書については、「Windows Azure での証明書の管理」を参照してください。

サービス管理 API を使用して要求を行うには、サブスクリプションに管理証明書が関連付けられている必要があります。複数のサブスクリプションで同じ管理証明書を使って要求を認証する場合、その各サブスクリプションに証明書が関連付けられている必要があります。管理証明書をサブスクリプションに追加した後、その証明書を使用して要求に署名することで、サービスに対する要求を認証できます。管理証明書の作成については、「Windows Azure の管理証明書の作成とアップロード」を参照してください。サブスクリプションへの管理証明書の関連付けについては、「Add a Management Certificate to a Windows Azure Subscription」を参照してください。

サービス管理 API を使用したアプリケーションを設計する場合、管理証明書に関して次の点に注意してください。

  • サービス管理 API は、証明書の期限が有効であるかどうかは検証しません。認証は、有効期限切れの証明書でも成功します。

  • すべての管理証明書は、同じ特権の組み合わせを有します。"ロール ベース" 認証の概念は存在しません。つまり、同じサブスクリプションの管理証明書をそれぞれ異なるロールで構成することはできません。

管理サービス要求に対する証明書の添付

管理サービスを使用して要求を認証するには、証明書を要求に添付する必要があります。このセクションでは、管理サービスに対する要求を、C#、System.Net ライブラリ、System.Security.Cryptography.X509Certificates ライブラリを使用して認証する方法について説明します。

このサンプル コード スニペットは、サービス管理 API の List Cloud Services 操作を対象とする 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