Эта документация перемещена в архив и не поддерживается.

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

Опубликовано: Апрель 2011 г.

Обновлено: Июнь 2015 г.

Назначение: Azure

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

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

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

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

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

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

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

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

    1. На портале управления Служба управления доступом щелкните узел Служба управления в разделе Администрирование в дереве с левой стороны страницы.

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

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

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

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

  5. Получите значение имени узла Служба управления доступом. Обычно это accesscontrol.windows.net.

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

  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://ВАШЕПРОСТРАНСТВОИМЕН.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 и его вспомогательные методы добавляют токен 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;
    
            }
    
    
    

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

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

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

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

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

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

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

Показ: