Поделиться через


Практическое руководство. Настройка правил и групп правил с помощью службы управления 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. Добавление группы правил

  • Шаг 6. Добавление правила

Шаг 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имени — contoso.

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

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

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

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

  1. Откройте Visual Studio 2012 г. и создайте проект консольного приложения в соответствии с установленным шаблоном Windows.

  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.Web;
    using System.Net;
    using System.Data.Services.Client;
    using System.Collections.Specialized;
    using System.Web.Script.Serialization;
    using System.Globalization;
    using System.Runtime.Serialization.Json; 
    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. Добавление группы правил

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

Добавление группы правил

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Добавьте новую группу правил (ее можно назвать "mygroup", как показано в коде ниже) и сохраните изменения, добавив следующий код в метод Main класса Program:

    RuleGroup rg = new RuleGroup();
                rg.Name = "mygroup";
                svc.AddToRuleGroups(rg);
                svc.SaveChanges(SaveChangesOptions.Batch);
    

Шаг 6. Добавление правила

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

Добавление правила

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

    // "LOCAL AUTHORITY" is a built-in IDP name that represents the Access Control namespace. 
    Issuer localAuthority = svc.Issuers.Where(m => m.Name == "LOCAL AUTHORITY").FirstOrDefault();
    
  2. Выполните одно из следующих действий.

    1. Чтобы добавить базовое правило, добавьте следующий код в метод Main класса Program:

                  //EXAMPLE #1 - BASIC RULE
                  Rule basicRule = new Rule()
                  {
                      InputClaimType = "https://acs/your-input-type",
                      InputClaimValue = "inputValue",
                      OutputClaimType = "https://acs/your-output-type",
                      OutputClaimValue = "outputValue",
                  };
      
                  basicRule.Description = string.Format(CultureInfo.InvariantCulture,
                      "Transforms claim from {0} with type: {1}, value: {2}, into a new claim with type: {3}, value:{4}",
                      "ACS",
                      basicRule.InputClaimType,
                      basicRule.InputClaimValue,
                      basicRule.OutputClaimType,
                      basicRule.OutputClaimValue);
      
                  svc.AddToRules(basicRule);
                  svc.SetLink(basicRule, "RuleGroup", rg);
                  svc.SetLink(basicRule, "Issuer", localAuthority);                                              
                    svc.SaveChanges(SaveChangesOptions.Batch);
      
    2. Чтобы добавить правило, которое передает определенное входящее утверждение и значение приложению без изменений, добавьте следующий код в метод Main класса Program:

      //EXAMPLE #2 - PASS TYPE AND VALUE RULE
                  Rule passSpecificClaimRule = new Rule()
                  {
                      InputClaimType = "https://acs/your-input-type2",
                      InputClaimValue = "inputValue2",
                  };
      
                  passSpecificClaimRule.Description = string.Format(CultureInfo.InvariantCulture,
                      "Passthough claim from {0} with type: {1}, value: {2}",
                      "ACS",
                      passSpecificClaimRule.InputClaimType,
                      passSpecificClaimRule.InputClaimValue);
      
                  svc.AddToRules(passSpecificClaimRule);
                  svc.SetLink(passSpecificClaimRule, "RuleGroup", rg);
                  svc.SetLink(passSpecificClaimRule, "Issuer", localAuthority); 
      svc.SaveChanges(SaveChangesOptions.Batch);
      
    3. Чтобы добавить правило, которое передает любое утверждение с указанным типом, добавьте следующий код в метод Main класса Program:

      //EXAMPLE #3 PASS SPECIFIC TYPE RULE
                  Rule passAnyClaimSpecificTypeRule = new Rule()
                  {
                      InputClaimType = "https://acs/your-input-type3",
                  };
      
                  passAnyClaimSpecificTypeRule.Description = string.Format(CultureInfo.InvariantCulture,
                      "Pass claim from {0} with type: {1}, and any value",
                      "ACS",
                      passSpecificClaimRule.InputClaimType);
      
                  svc.AddToRules(passAnyClaimSpecificTypeRule);
                  svc.SetLink(passAnyClaimSpecificTypeRule, "RuleGroup", rg);
                  svc.SetLink(passAnyClaimSpecificTypeRule, "Issuer", localAuthority); 
      svc.SaveChanges(SaveChangesOptions.Batch);
      
    4. Чтобы добавить правило, которое передает входящее утверждение с указанным значением, добавьте следующий код в метод Main класса Program:

      //EXAMPLE #4 PASS ANY CLAIM W/SPECIFIC VALUE RULE
                  Rule passAnyClaimSpecificValueRule = new Rule()
                  {
                      InputClaimValue = "inputValue3",
                  };
      
                  passAnyClaimSpecificValueRule.Description = string.Format(CultureInfo.InvariantCulture,
                      "Pass claim from {0} with any type, and specific value {1}",
                      "ACS",
                      passSpecificClaimRule.InputClaimValue);
      
                  svc.AddToRules(passAnyClaimSpecificValueRule);
                  svc.SetLink(passAnyClaimSpecificValueRule, "RuleGroup", rg);
                  svc.SetLink(passAnyClaimSpecificValueRule, "Issuer", localAuthority); 
      svc.SaveChanges(SaveChangesOptions.Batch);
      
    5. Чтобы добавить правило, которое преобразует указанный тип входящего утверждения в другой тип исходящего утверждения, но не меняет значение утверждения, добавьте следующий код в метод Main класса Program:

      //EXAMPLE #5 COMPLEX RULE
                  Rule complexTransformationRule = new Rule()
                  {
                      InputClaimType = "https://acs/your-input-type4",
                      OutputClaimType = "https://acs/your-output-type2",
                  };
      
                  complexTransformationRule.Description = string.Format(CultureInfo.InvariantCulture,
                      "Transforms claim from {0} with type: {1}, and any value, into a new claim with type: {2}, keeping(passingthough) old value",
                      "ACS",
                      complexTransformationRule.InputClaimType,
                      complexTransformationRule.OutputClaimType);
      
                  svc.AddToRules(complexTransformationRule);
                  svc.SetLink(complexTransformationRule, "RuleGroup", rg);
                  svc.SetLink(complexTransformationRule, "Issuer", localAuthority);
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      

См. также:

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

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