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

方法: ACS 管理サービスを使用してサービス ID を構成する

発行: 2011年4月

更新日: 2015年3月

適用対象: Azure

  • Microsoft Azure Active Directory アクセス制御 (アクセス制御サービスまたは ACS)

ACS 管理ポータルまたは ACS 管理サービスを使用して、ACS サービス ID を構成することができます (詳細については、「サービス ID」を参照)。ACS を管理するためのカスタム ユーザー インターフェイスを作成する場合や、マルチテナント SaaS (Software as a Service) ソリューションの新しいテナントのオンボーディングを自動化する場合に ACS 管理サービスを使用するとより効率的です。

Important重要
次の手順を実行する前に、ご使用のシステムが、「ACS の前提条件」で要約されている .NET Framework およびプラットフォームのすべての要件を満たしていることを確認してください。

ACS 管理サービスを使用してサービス ID を構成するには、以下の手順を実行します。

ACS 管理ポータルを使用して、必要な構成情報を収集することができます。ACS 管理ポータルの起動方法の詳細については、「ACS 管理ポータル」を参照してください。

  1. ACS 管理ポータルを起動します。ACS 管理ポータルの起動方法の詳細については、「ACS 管理ポータル」を参照してください。

  2. ACS 管理サービス アカウントの値を取得します。既定の ManagementClient アカウントを使用できます。この値を表示するには、ACS 管理ポータルで、ページの左側にあるツリーの [管理] セクションで [管理サービス] をクリックします。

  3. ACS 管理サービス アカウント パスワードの値を取得します。この値を表示するには、次の操作を実行します。

    1. ACS 管理ポータルで、ページの左側にあるツリーの [管理] セクションで [管理サービス] をクリックします。

    2. [管理サービス] ページの [管理サービス アカウント] で [ManagementClient] をクリックします。

    3. [管理サービス アカウントの編集] ページの [資格情報] で [パスワード] をクリックします。

    4. [管理資格情報の編集] ページで、[パスワード] フィールドの値をコピーします。

  4. Azure 名前空間の値を取得します。この値は、Azure ポータルまたは ACS 管理ポータルの URL から取得できます。たとえば、http://contoso.accesscontrol.windows.net の場合、Azure 名前空間の値は contoso です。

  5. ACS ホスト名の値を取得します。通常、これは accesscontrol.windows.net です。

この手順では、ACS サービス ID を追加するためのコードを実行できるサンプルのコンソール アプリケーションを作成します。

  1. Visual Studio 2012 を開き、新しいコンソール アプリケーション プロジェクトを作成します。

  2. 次のコードを Program クラスに追加してから、serviceIdentityPasswordForManagement、serviceNamespace、および acsHostName 変数を、上記の手順で収集した適切な構成情報に割り当てます。

    public const string serviceIdentityUsernameForManagement = "ManagementClient";
    public const string serviceIdentityPasswordForManagement = "My Password/Key for ManagementClient";
    public const string serviceNamespace = "MyNameSpaceNoDots";
    public const string acsHostName = "accesscontrol.windows.net";
    public const string acsManagementServicesRelativeUrl = "v2/mgmt/service/";
    static string cachedSwtToken;
    
    

この手順では、サービスとアセンブリに必要な依存関係を特定して追加します。

  1. [参照] を右クリックし、[参照の追加] をクリックして、参照を System.Web.Extensions に追加します。

    noteメモ
    ソリューション エクスプローラーでサンプルのコンソール アプリケーション名を右クリックし、[プロパティ] を選択して、サンプル アプリケーションのターゲット フレームワークを .NET Framework 4 Client Profile (新しいコンソール アプリケーションの作成時に既定で割り当てられる) から .NET Framework 4 に変更しなければならない場合があります。

  2. [サービス参照] を右クリックし、[サービス参照の追加] をクリックして、管理サービスにサービス参照を追加します。管理サービスの URL は名前空間に対して一意であり、次のような形式です。

    https://YOURNAMESPACE.accesscontrol.windows.net/v2/mgmt/service

  3. 次の宣言を追加します。ここで、MyConsoleApplication はコンソール アプリケーションの名前で、MyServiceReference はサービス参照の名前です。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Net;
    using System.Data.Services.Client;
    using System.Collections.Specialized;
    using System.Web.Script.Serialization;
    using System.Globalization; 
    using System.Security.Cryptography;
    using System.Security.Cryptography.X509Certificates;
    using MyConsoleApplication.MyServiceReference;
    
    

この手順では、管理サービス クライアントを実装します。

  1. 次のメソッドを Program クラスに追加します。

       public static ManagementService CreateManagementServiceClient()
            {
                string managementServiceEndpoint = String.Format(CultureInfo.InvariantCulture, "https://{0}.{1}/{2}",
                    serviceNamespace,
                    acsHostName,
                    acsManagementServicesRelativeUrl);
                ManagementService managementService = new ManagementService(new Uri(managementServiceEndpoint));
    
                managementService.SendingRequest += GetTokenWithWritePermission;
    
                return managementService;
            }
    
    
  2. 次のコードを Program クラスに追加して、GetTokenWithWritePermission メソッドとそのヘルパー メソッドを作成します。GetTokenWithWritePermission とそのヘルパーにより、HTTP 要求の承認ヘッダーに SWT OAuth トークンが追加されます。

    public static void GetTokenWithWritePermission(object sender, SendingRequestEventArgs args)
            {
                GetTokenWithWritePermission((HttpWebRequest)args.Request);
            }
    
            public static void GetTokenWithWritePermission(HttpWebRequest args)
            {
                if (cachedSwtToken == null)
                {
                    cachedSwtToken = GetTokenFromACS();
                }
    
                args.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + cachedSwtToken);
            }
    
            private static string GetTokenFromACS()
            {
                //
                // Request a token from ACS
                //
                WebClient client = new WebClient();
                client.BaseAddress = string.Format(CultureInfo.CurrentCulture, 
                                                   "https://{0}.{1}", 
                                                   serviceNamespace, 
                                                   acsHostName);
    
                NameValueCollection values = new NameValueCollection();
                values.Add("grant_type", "client_credentials");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("scope", client.BaseAddress + acsManagementServicesRelativeUrl);
    
                byte[] responseBytes = client.UploadValues("/v2/OAuth2-13", "POST", values);
    
                string response = Encoding.UTF8.GetString(responseBytes);
    
                // Parse the JSON response and return the access token 
                JavaScriptSerializer serializer = new JavaScriptSerializer();
    
                Dictionary<string, object> decodedDictionary = serializer.DeserializeObject(response) as Dictionary<string, object>;
    
                return decodedDictionary["access_token"] as string;
    
            }
    
    
    

この手順では、上記の手順で作成した管理サービス クライアントを使用して、サービス ID を追加します。ACS サービス ID では、資格情報の種類として、パスワード、対称キー、または X.509 証明書を使用できます。

  1. 次のコードを Program クラスの Main メソッドに追加して、管理サービス クライアントを初期化します。

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. 以下のいずれかを実行します。

    • パスワードに関連付けられているサービス ID を追加して変更を保存するには、Program クラスの Main メソッドに以下のコードを追加します。

      noteメモ
      以下のコードに示されているように、このサービス ID に "SampleServiceIdentity" という名前を付けて、そのパスワードを "SampleServiceIdentityPassword" に設定することができます。

      
                  string name = "SampleServiceIdentity";
                  string password = "SampleServiceIdentityPassword";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Password",
                      Usage = "Password",
                      Value = Encoding.UTF8.GetBytes(password),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Password", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
      
    • 対称キーに関連付けられているサービス ID を追加して変更を保存するには、Program クラスの Main メソッドに以下のコードを追加します。

      noteメモ
      以下のコードに示されているように、このサービス ID に "SampleServiceIdentity" という名前を付けて、その対称キーの値を "SampleServiceIdentityPassword" に設定することができます。

      
                  string name = "SampleServiceIdentity";
                  string symKey = "SampleServiceIdentitySymmetricKey";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Symmetric",
                      Usage = "Signing",
                      Value = Convert.FromBase64String(symKey),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Sym Key", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
      
    • X.509 証明書に関連付けられているサービス ID を追加して変更を保存するには、Program クラスの Main メソッドに以下のコードを追加します。

      noteメモ
      以下のコードに示されているように、このサービス ID に "SampleServiceIdentity" という名前を付けることができます。

      以下のコードの "Full path to your .CER file" を X.509 証明書への完全修飾パスに置き換えます。たとえば、ACS2ClientCertificate.cer という証明書が C:\ に保存されている場合、正しい値は "C:\ ACS2ClientCertificate.cer" となります。

      
                  string name = "SampleServiceIdentity";
                  X509Certificate2 cert = new X509Certificate2(@"Full path to your .CER file");
      
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
      
                  startDate = cert.NotBefore.ToUniversalTime();
                  endDate = cert.NotAfter.ToUniversalTime();
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "X509Certificate",
                      Usage = "Signing",
                      Value = cert.GetRawCertData(),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Cert", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
      

関連項目

コミュニティの追加

追加
表示:
© 2015 Microsoft