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


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

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

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

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

  • Служба контроля доступа Microsoft® Azure™ (ACS)

  • Facebook

Сводка

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

Содержимое

  • Задачи

  • Обзор

  • Сводка действий

  • Шаг 1. Сбор сведений о конфигурации

  • Шаг 2. Добавление ссылок на требуемые службы и сборки

  • Шаг 3. Реализация прокси-сервера службы управления

  • Шаг 4. Добавление поставщика удостоверений

  • Шаг 5. Тестирование работы

Задачи

  • Определить предварительные требования и сведения о конфигурации.

  • Перечислить действия, необходимые для добавления Facebook в качестве поставщика удостоверений.

  • Проверить правильность настройки.

Обзор

Служба управления — это веб-служба, которая является одним из ключевых компонентов ACS. Служба управления предоставляет возможности, доступные в пользовательском интерфейсе портала управления. Все, что можно сделать на портале управления, также можно сделать через службу управления. Добавление Facebook в качестве поставщика удостоверений в ACS позволяет сэкономить на разработке и обслуживании механизма управления удостоверениями в Интернете. Чтобы настроить Facebook как поставщик удостоверений, необходимо написать код, выполняющий определенные действия. Они описаны в этом разделе.

Сводка действий

  • Шаг 1. Сбор сведений о конфигурации

  • Шаг 2. Добавление ссылок на требуемые службы и сборки

  • Шаг 3. Реализация прокси-сервера службы управления

  • Шаг 4. Добавление поставщика удостоверений

  • Шаг 5. Тестирование работы

Шаг 1. Сбор сведений о конфигурации

Здесь описывается сбор необходимых сведений о конфигурации. Необходимо собрать следующие сведения.

  • Имя пользователя с удостоверением службы управленияManagementClient.

  • Пароль для удостоверения службы управления — нужно получить пароль удостоверения службы управления.

    1. Войдите в портал управления службы контроля доступа.

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

    3. На странице Служба управления щелкните ссылку ManagementClient (ManagementClient — это фактическое имя пользователя для службы).

    4. В разделе Учетные данные щелкните ссылку Симметричный ключ или Пароль. Значение в обоих разделах одинаковое. Это и есть пароль.

  • Пространство имен вашей службы

  • Имя узла ACS — обычно accesscontrol.windows.net.

  • Идентификатор приложения Facebook и секрет приложения. Следуйте инструкциям в разделе "Практическое руководство. Настройка Facebook в качестве поставщика удостоверений".

После сбора необходимых сведений выполните следующие действия, чтобы создать консольное приложение, которое выполняет код для добавления Facebook в качестве поставщика удостоверений:

  1. Откройте среду Visual Studio® 2010 и создайте новый проект консольного приложения.

  2. В классе Program занесите собранные ранее сведения в переменные с областью видимости модуля, используя код, аналогичный следующему.

static string serviceIdentityUsernameForManagement = "ManagementClient";
static string serviceIdentityPasswordForManagement = "My Password for my ManagementClient";

static string serviceNamespace = "MyNameSpaceNoDots";
static string acsHostName = "accesscontrol.windows.net";
static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";


static string cachedSwtToken;
static string identityProviderName = "Facebook";

static string facebookAppId = "Your Facebook AppID";
static string facebookAppSecret = "Your Facebook Secret";

Шаг 2. Добавление ссылок на требуемые службы и сборки

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

Добавление необходимых зависимостей в службах и сборках

  1. Добавьте ссылку на System.Web.Extensions.

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

    https:// YOURNAMESPACE.accesscontrol.windows.net/v2/mgmt/service

  3. Добавьте следующие объявления.

    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 ConsoleApplication1.ServiceReference1;
    

Обратите внимание на последнее объявление, ConsoleApplication1.ServiceReference1, оно может отличаться, если вы изменили значения по умолчанию при создании консольного приложения или добавлении ссылки на службу управления.

Шаг 3. Реализация прокси-сервера службы управления

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

Реализация прокси-сервера службы управления

  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 и его вспомогательные методы. При этом в заголовок авторизации запроса 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, "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;
    
            }
    
    

Шаг 4. Добавление поставщика удостоверений

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

Добавление Facebook в качестве поставщик удостоверений

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Добавьте свой поставщик удостоверений в качестве издателя.

    Issuer issuer = new Issuer
    {
       Name = identityProviderName + “-” + facebookAppId
    };
    svc.AddToIssuers(issuer);
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  3. Создайте поставщик удостоверений.

    var facebook = new IdentityProvider
    {
        DisplayName = identityProviderName,
        LoginLinkName = "Facebook",
        LoginParameters = "email",
        WebSSOProtocolType = "Facebook",
        IssuerId = issuer.Id
    };
    
    svc.AddObject("IdentityProviders", facebook);
    
  4. Создайте ключ подписи поставщика удостоверений на основе сертификата, полученного ранее.

    var facebookKeys = new[]
        {
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationId",
                    Value = Encoding.UTF8.GetBytes(facebookAppId)
                },
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationSecret",
                    Value = Encoding.UTF8.GetBytes(facebookAppSecret)
                }
        };
    
    foreach (var key in facebookKeys)
    {
        svc.AddRelatedObject(facebook, "IdentityProviderKeys", key);
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  5. Сделайте поставщик удостоверений доступным для проверяющих сторон (за исключением службы управления).

    foreach (RelyingParty rp in svc.RelyingParties)
    {
        // skip the built-in management RP. 
        if (rp.Name != "AccessControlManagement")
        {
            svc.AddToRelyingPartyIdentityProviders(new RelyingPartyIdentityProvider()
            {
                IdentityProviderId = facebook.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    

Шаг 5. Тестирование работы

Проверка работы

  1. Войдите в портал управления службы контроля доступа.

  2. На странице Служба контроля доступа щелкните ссылку Группы правил в разделе Отношения доверия.

  3. Щелкните любое из доступных правил.

  4. На странице Изменение группы правил щелкните ссылку Добавить правило.

  5. На странице Добавление правила утверждения выберите добавленный поставщик удостоверений из списка в разделе Издатель утверждений.

  6. Оставьте для других параметров значения по умолчанию.

  7. Выберите команду Сохранить.

Вы создали сквозное правило для поставщика удостоверения.