Инструкция по использованию службы управления ACS для настройки удостоверений службы

Обновлено: 19 июня 2015 г.

Область применения: Azure

Применяется к

  • Microsoft Azure Active Directory Access Control (также называется Access Control Service или ACS)

Обзор

Удостоверения службы ACS можно настроить с помощью портала управления ACS (дополнительные сведения см. в разделе "Удостоверения служб") или службы управления ACS. Работа со службой управления ACS может быть более эффективной, если вы создаете пользовательский пользовательский интерфейс для управления ACS или хотите автоматизировать подключение нового клиента для мультитенантных решений Software as a Service (SaaS).

Настройка удостоверений службы с помощью службы управления ACS

Важно!

Прежде чем выполнять следующие действия, убедитесь, что система соответствует всем требованиям .NET платформы и платформы, которые перечислены в предварительных требованиях ACS.

Чтобы настроить удостоверения службы с помощью службы управления ACS, выполните следующие действия.

  • Шаг 1. Сбор сведений о конфигурации ACS

  • Шаг 2. Создание демонстрационного консольного приложения

  • Шаг 3. Добавление ссылок на необходимые службы и сборки

  • Шаг 4. Реализация клиента службы управления

  • Шаг 5. Добавление удостоверения службы

Шаг 1. Сбор сведений о конфигурации ACS

Портал управления ACS можно использовать для сбора необходимых сведений о конфигурации. Дополнительные сведения о запуске портала управления ACS см. на портале управления ACS.

Сбор сведений о конфигурации ACS

  1. Запустите портал управления ACS. Дополнительные сведения о запуске портала управления ACS см. на портале управления ACS.

  2. Получите значение учетной записи службы управления ACS. Можно использовать учетную запись по умолчанию ManagementClient. Чтобы просмотреть это значение, на портале управления ACS щелкните "Управление" в разделе "Администрирование " в дереве в левой части страницы.

  3. Получите значение пароля учетной записи службы управления ACS. Чтобы увидеть это значение, выполните следующие действия.

    1. На портале управления ACS щелкните "Управление" в разделе "Администрирование " в дереве в левой части страницы.

    2. На странице Служба управления щелкните ManagementClient в разделе Учетные записи службы управления.

    3. На странице изменения учетной записи службы управления в разделе Учетные данные выберите пункт Пароль.

    4. На странице изменения учетных данных управления скопируйте значение из поля Пароль.

  4. Получите значение пространства имен Azure. Это значение можно получить из портал Azure или url-адреса портала управления ACS. Например, в http://contoso.accesscontrol.windows.netкачестве значения пространства имен Azure используется contoso.

  5. Получите значение имени узла ACS. Обычно это accesscontrol.windows.net.

Шаг 2. Создание демонстрационного консольного приложения

На этом шаге вы создадите пример консольного приложения, которое может выполнять код для добавления удостоверений службы ACS.

Создание демонстрационного консольного приложения

  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;
    

Шаг 3. Добавление ссылок на необходимые службы и сборки

На этом шаге будут определяться и добавляться необходимые зависимости в службах и сборках.

Добавление необходимых зависимостей в службах и сборках

  1. Щелкните правой кнопкой мыши элемент Ссылки, выберите команду Добавить ссылку и добавьте ссылку на System.Web.Extensions.

    Примечание

    Если требуется изменить целевую платформу демонстрационного приложения с .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;
    

Шаг 4. Реализация клиента службы управления

На этом шаге будет реализован клиент службы управления.

Реализация клиента службы управления

  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 и его вспомогательные методы добавляют токен SWT OAuth в заголовок авторизации запроса HTTP.

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

Шаг 5. Добавление удостоверения службы

На этом шаге будет добавляться удостоверение службы с помощью клиента службы управления, созданного на предыдущем шаге. Удостоверение службы ACS в качестве типа учетных данных может использовать пароль, симметричный ключ или сертификат X.509.

Добавление удостоверения службы

  1. Инициализируйте клиент службы управления, добавив в метод Main класса Program следующий код:

    ManagementService svc = CreateManagementServiceClient();
    
  2. Выполните одно из следующих действий.

    • Чтобы добавить удостоверение службы, связанное с паролем, и сохранить изменения, добавьте в метод Main класса Program следующий код:

      Примечание

      Можно вызвать это удостоверение службы "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);
      
    • Чтобы добавить удостоверение службы, связанное с симметричным ключом, и сохранить изменения, добавьте в метод Main класса Program следующий код:

      Примечание

      Можно вызвать это удостоверение службы "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, и сохранить изменения, добавьте в метод Main класса Program следующий код:

      Примечание

      Можно вызвать это удостоверение службы "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);
      

См. также:

Основные понятия

Практические советы по работе с ACS