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

Инструкции по использованию службы управления 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 пространство имен — contoso.

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

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

  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;
    
    

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

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

    noteПримечание
    Возможно, придется щелкнуть правой кнопкой имя вашего консольного приложения в обозревателе решений, выберите Свойства и измените целевую платформу приложения с Клиентский профиль .NET Framework 4 (назначается по умолчанию при создании консольного приложения) на .NET Framework 4.

  2. Щелкните правой кнопкой Ссылки на службы, выберите Добавить ссылку на службу и добавьте ссылку на службу управления. URL-адрес службы управления уникален для вашего пространства имен и выглядит следующим образом:

    https://ваше_пространство_имен.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;
    
    

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

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

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

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

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

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

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

  1. Создайте переменную для встроенного имени издателя "LOCAL AUTHORITY", которое представляет ваше пространство имен Пространство имен Access Control, добавив следующий код в метод Main класса Program:

    
    // "LOCAL AUTHORITY" is a built-in IDP name that represents the Пространство имен Access Control. 
    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

Показ: