Практическое руководство. Использование службы управления ACS для настройки AD FS 2.0 в качестве поставщика удостоверений Enterprise
Обновлено: 19 июня 2015 г.
Область применения: Azure
Применяется к
Служба контроля доступа Microsoft® Azure™ (ACS)
Службы федерации Microsoft Active Directory (AD FS) 2.0
Сводка
В этом разделе объясняется, как добавить поставщика удостоверений в пространство имен или приложение проверяющей стороны. Для выполнения этой задачи можно использовать службу управления ACS. Служба управления особенно полезна при создании пользовательского пользовательского интерфейса для управления ACS и автоматизации добавления новых клиентов для мультитенантных решений saaS.
Содержимое
Задачи
Обзор
Сводка действий
Шаг 1. Сбор сведений о конфигурации
Шаг 2. Добавление ссылок на требуемые службы и сборки
Шаг 3. Реализация прокси-сервера службы управления
Шаг 4. Добавление поставщика удостоверений
Шаг 5. Тестирование работы
Задачи
Определите требования и сведения о конфигурации.
Перечислите необходимые шаги.
Проверьте успешность выполнения конфигурации.
Обзор
Служба управления ACS — это веб-служба, которая предоставляет функции ACS для кода. Служба управления ACS может получить доступ ко всем функциям ACS, включая подмножество функций, доступное в пользовательском интерфейсе портала управления ACS.
Добавление Корпорации Майкрософт в качестве поставщика удостоверений в ACS позволяет повторно использовать инвестиции, внесенные в управление корпоративными удостоверениями для облачных решений. Чтобы настроить в качестве поставщика удостоверений, необходимо написать код, который выполняет определенные действия. Они описаны в этом разделе.
Сводка действий
Шаг 1. Сбор сведений о конфигурации
Шаг 2. Добавление ссылок на требуемые службы и сборки
Шаг 3. Реализация прокси-сервера службы управления
Шаг 4. Добавление поставщика удостоверений
Шаг 5. Тестирование работы
Шаг 1. Сбор сведений о конфигурации
Этот шаг описывает сбор обязательных сведений о конфигурации. Необходимо собрать следующие сведения.
Имя пользователя удостоверения службы управления. Значение по умолчанию равно ManagementClient.
Пароль удостоверения службы управления.
Имя пространства имен.
Имя узла ACS: accesscontrol.windows.net
Строка сертификата подписи. Получите строку сертификата подписи AD FS из развертывания.
Чтобы найти имя пользователя и пароль удостоверения службы управления, выполните следующие действия.
Перейдите на портал управления Microsoft Azure (https://manage.WindowsAzure.com), войдите в систему и щелкните Active Directory. (Совет по устранению неполадок: элемент Active Directory отсутствует или недоступен) Чтобы управлять пространством имен контроль доступа, выберите пространство имен и нажмите кнопку "Управление". (Или щелкните Пространства имен Access Control, выберите пространство имен, а затем щелкните Управление.)
Нажмите Служба управления и выберите службу управления, например ManagementClient.
Значение поля "Имя " — имя пользователя удостоверения службы управления.
В разделе Учетные данные нажмите Пароль. Значение поля "Пароль" является паролем службы управления.
После сбора необходимых сведений выполните следующие действия, чтобы создать пример консольного приложения, которое выполнит код для добавления в качестве поставщика удостоверений:
Запустите Visual Studio и создайте проект консольного приложения.
В классе Программа присвойте значения сведений о конфигурации переменным с модульной областью действия. Следующий образец кода показывает, как это можно сделать.
static string serviceIdentityUsernameForManagement = "ManagementClient"; static string serviceIdentityPasswordForManagement = "ManagementClientPasswordValue"; static string serviceNamespace = "MyNameSpaceNoDots"; static string acsHostName = "accesscontrol.windows.net"; static string signingCertificate = "Very long string representing ADFS signing certificate"; static string cachedSwtToken; static string identityProviderName = "My Other ADFS Identity Provider";
Шаг 2. Добавление ссылок на требуемые службы и сборки
На этом шаге определяются и добавляются необходимые зависимости от служб и сборок.
Добавление необходимых зависимостей в службах и сборках
Добавьте ссылку на System.Web.Extensions.
Добавьте ссылку на службу управления. URL-адрес службы управления уникален для вашего пространства имен и выглядит следующим образом:
https:// YOURNAMESPACE.accesscontrol.windows.net/v2/mgmt/service
Добавьте следующие объявления.
using System.Web; using System.Net; using System.Data.Services.Client; using System.Collections.Specialized; using System.Web.Script.Serialization;
Шаг 3. Реализация прокси-сервера службы управления
На этом шаге создается метод, инкапсулирующий реализацию прокси-сервера службы управления.
Реализация прокси-сервера службы управления
Добавьте следующий метод в класс Program.
public static ManagementService CreateManagementServiceClient() { string managementServiceHead = "v2/mgmt/service/"; string managementServiceEndpoint = string.Format("https://{0}.{1}/{2}", serviceNamespace, acsHostName, managementServiceHead); ManagementService managementService = new ManagementService(new Uri(managementServiceEndpoint)); managementService.SendingRequest += GetTokenWithWritePermission; return managementService; }
Реализуйте метод GetTokenWithWritePermission и его вспомогательные методы. При этом в заголовок авторизации запроса HTTP будет добавлен токен SWT OAuth.
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, string.Format("OAuth {0}", cachedSwtToken)); } private static string GetTokenFromACS() { // request a token from ACS WebClient client = new WebClient(); client.BaseAddress = string.Format("https://{0}.{1}", serviceNamespace, acsHostName); NameValueCollection values = new NameValueCollection(); values.Add("grant_type", "password"); values.Add("client_id", serviceIdentityUsernameForManagement); values.Add("username", serviceIdentityUsernameForManagement); values.Add("client_secret", serviceIdentityPasswordForManagement); values.Add("password", serviceIdentityPasswordForManagement); byte[] responseBytes = client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", "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; }
Шаг 4. Добавление поставщика удостоверений
Этот шаг добавляется в качестве поставщика удостоверений с помощью созданного ранее прокси-сервера службы управления.
Добавление AD FS 2.0 в качестве поставщика удостоверений
Выполните инициализацию прокси-сервера службы управления.
ManagementService svc = CreateManagementServiceClient();
Добавьте свой поставщик удостоверений в качестве издателя.
Issuer issuer = new Issuer { Name = identityProviderName }; svc.AddToIssuers(issuer); svc.SaveChanges(SaveChangesOptions.Batch);
Создайте поставщик удостоверений.
IdentityProvider identityProvider = new IdentityProvider() { DisplayName = identityProviderName, Description = identityProviderName, WebSSOProtocolType = "WsFederation", IssuerId = issuer.Id }; svc.AddObject("IdentityProviders", identityProvider);
Создайте ключ подписи поставщика удостоверений на основе сертификата, полученного ранее.
IdentityProviderKey identityProviderKey = new IdentityProviderKey() { DisplayName = "SampleIdentityProviderKeyDisplayName", Type = "X509Certificate", Usage = "Signing", Value = Convert.FromBase64String(signingCertificate), IdentityProvider = identityProvider, StartDate = startDate, EndDate = endDate, }; svc.AddRelatedObject(identityProvider, "IdentityProviderKeys", identityProviderKey);
Обновите адрес для входа поставщика удостоверений.
IdentityProviderAddress realm = new IdentityProviderAddress() { Address = "http://SampleIdentityProvider.com/sign-in/", EndpointType = "SignIn", IdentityProvider = identityProvider, }; svc.AddRelatedObject(identityProvider, "IdentityProviderAddresses", realm); svc.SaveChanges(SaveChangesOptions.Batch);
Сделайте поставщик удостоверений доступным для проверяющих сторон (за исключением службы управления).
foreach (RelyingParty rp in svc.RelyingParties) { // skip the built-in management RP. if (rp.Name != "AccessControlManagement") { svc.AddToRelyingPartyIdentityProviders(new RelyingPartyIdentityProvider() { IdentityProviderId = identityProvider.Id, RelyingPartyId = rp.Id }); } } svc.SaveChanges(SaveChangesOptions.Batch);
Шаг 5. Тестирование работы
Проверка работы
На странице Служба контроля доступа щелкните ссылку Группы правил в разделе Отношения доверия.
Щелкните любое из доступных правил.
На странице Изменение группы правил щелкните ссылку Добавить правило.
На странице Добавление правила утверждения выберите добавленный поставщик удостоверений из списка в разделе Издатель утверждений.
Оставьте для других параметров значения по умолчанию.
Выберите команду Сохранить.
Вы создали сквозное правило для поставщика удостоверения.