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

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

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

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

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

Обзор

Приложения проверяющей стороны ACS можно настроить с помощью портала управления ACS (дополнительные сведения см. в разделе "Приложения проверяющей стороны") или в службе управления ACS. Работа со службой управления ACS может быть более эффективной, если вы создаете пользовательский пользовательский интерфейс для управления ACS или хотите автоматизировать адаптацию нового клиента для мультитенантных решений 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имени пространства имен — 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 — имя консольного приложения:

    using System;
    using System.IO;
    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. Добавьте метод GetTokenWithWritePermission и его вспомогательные методы в класс Program. Метод 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. Добавление приложения проверяющей стороны

На этом шаге вы создадите пример приложения проверяющей стороны с форматом токена SAML 2.0 (параметром по умолчанию), без политики шифрования маркеров (по умолчанию), связанной с поставщиком удостоверений Windows Live ID (учетная запись Майкрософт), 600 секунд времени существования маркера (по умолчанию) и пользовательским сертификатом подписи маркера X.509 для приложения проверяющей стороны или сертификата подписи маркера для приложения проверяющей стороны или сертификата подписи маркера для приложения проверяющей стороны. контроль доступа пространство имен.

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

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

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

    Примечание

    Замените полный путь к вашему PFX-файлe в коде ниже на действительный полный путь к вашему сертификату X.509. Например, если сертификат ACS2ClientCertificate.cer сохраняется в папке C:, правильное значение — "C:\ ACS2ClientCertificate.cer".

    Замените "MyCertificatePassword" в коде ниже на правильный пароль к сертификату X.509.

                //Create Relying Party Application
    
                RelyingParty relyingParty = new RelyingParty()
                {
                    Name = "MyRelyingPartyApplication",
                    AsymmetricTokenEncryptionRequired = false,
                    TokenType = "SAML_2_0",
                    TokenLifetime = 3600
                };
    
                svc.AddToRelyingParties(relyingParty);
    
    
                //Create the Realm Address
    
                RelyingPartyAddress realmAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Realm",
                    EndpointType = "Realm"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress);
    
                //Create the Return URL Address
    
                RelyingPartyAddress replyAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Reply",
                    EndpointType = "Reply"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress);
    
              // Create a Rule Group for This Relying Party Application
    
                RuleGroup rg = new RuleGroup();
                rg.Name = "SampleRuleGroup For " + relyingParty.Name;
                svc.AddToRuleGroups(rg);
    
                // Assign This New Rule Group to Your New Relying Party Application
    
                RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup();
    
                svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup);
                svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
                svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
    
    
                //Save Your New Relying Party Application
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    

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

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Создайте вспомогательную функцию ReadBytesFromPfxFile для чтения байтов сертификата X.509, добавив в класс Program следующий код:

    //Helper Function to Read Bytes from Your .pfx file
    
            public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword)
            {
                byte[] signingCertificate;
                using (FileStream stream = File.OpenRead(pfxFileName))
                {
                    using (BinaryReader br = new BinaryReader(stream))
                    {
                        signingCertificate = br.ReadBytes((int)stream.Length);
                    }
                }
    
                return signingCertificate;
            }
    
  3. Добавьте новое приложение проверяющей стороны (ее можно назвать "MyRelyingPartyApplication", как показано в коде ниже) и сохраните изменения, добавив следующий код в метод Main класса Program:

    Примечание

    Замените полный путь к вашему PFX-файлe в коде ниже на действительный полный путь к вашему сертификату X.509. Например, если сертификат ACS2ClientCertificate.cer сохраняется в папке C:, правильное значение — "C:\ ACS2ClientCertificate.cer".

    Замените "MyCertificatePassword" в коде ниже на правильный пароль к сертификату X.509.

                //Create Relying Party Application
    
                RelyingParty relyingParty = new RelyingParty()
                {
                    Name = "MyRelyingPartyApplication",
                    AsymmetricTokenEncryptionRequired = false,
                    TokenType = "SAML_2_0",
                    TokenLifetime = 3600
                };
    
                svc.AddToRelyingParties(relyingParty);
    
    
                //Create the Realm Address
    
                RelyingPartyAddress realmAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Realm",
                    EndpointType = "Realm"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress);
    
                //Create the Return URL Address
    
                RelyingPartyAddress replyAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Reply",
                    EndpointType = "Reply"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress);
    
                //Create a Signing Certificate
    
                X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", "MyCertificatePassword");
                DateTime startDate, endDate;
                startDate = cert.NotBefore.ToUniversalTime();
                endDate = cert.NotAfter.ToUniversalTime();
    
                string pfxFileName = @"Full path to your .PFX file";
                string pfxPassword = @"MyCertificatePassword";
    
                byte[] signingCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword);
    
                RelyingPartyKey relyingPartyKey = new RelyingPartyKey()
                {
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime(),
                    Type = "X509Certificate",
                    Usage = "Signing",
                    IsPrimary = true,
                    Value = signingCertificate,
                    Password = Encoding.UTF8.GetBytes("MyCertificatePassword")
                };
                svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey);
    
    
              // Create a Rule Group for This Relying Party Application
    
                RuleGroup rg = new RuleGroup();
                rg.Name = "SampleRuleGroup For " + relyingParty.Name;
                svc.AddToRuleGroups(rg);
    
                // Assign This New Rule Group to Your New Relying Party Application
    
                RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup();
    
                svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup);
                svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
                svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
    
    
                //Save Your New Relying Party Application
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    

См. также:

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

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