Экспорт (0) Печать
Развернуть все
Развернуть Свернуть

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

Опубликовано: Апрель 2011 г.

Обновлено: Февраль 2014 г.

Назначение: Azure

  • Службе управления доступом Microsoft® Windows Azure™ AppFabric (ACS)

  • OpenID 2.0

В этом разделе описаны основные этапы добавления поставщиков удостоверений, поддерживающих протокол OpenID. Поставщики удостоверений OpenID следует добавлять в Служба управления доступом, используя службу управления. Поставщики удостоверений OpenID нельзя добавить в Служба управления доступом, используя портал управления. В этом разделе используется спецификация OpenID 2.0, так как именно эту версию поддерживает Служба управления доступом.

  • Задачи

  • Общие сведения

  • Этапы

  • Этап 1. Сбор конфигурационных данных.

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

  • Этап 3. Реализация клиента службы управления.

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

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

  • Перечисление всех этапов добавления поставщика удостоверений OpenID.

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

  • Этап 1. Сбор конфигурационных данных.

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

  • Этап 3. Реализация клиента службы управления.

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

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

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

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

    1. Войдите на портал управления службы управления доступом (http://go.microsoft.com/fwlink/?LinkID=129428).

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

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

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

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

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

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

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

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


        static string serviceIdentityUsernameForManagement = "ManagementClient";
        static string serviceIdentityPasswordForManagement = "...update to your password...";

        static string serviceNamespace = "...update to your namespace...";
        static string acsHostName = "accesscontrol.windows.net";
        static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";

        static string identityProviderName = "My Open ID Identity Provider";

        static string cachedSwtToken;


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

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

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

    https://ПРОСТРАНСТВО_ИМЕН.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, может отличаться в вашем случае, если вы изменили значения по умолчанию при создании консольного приложения или добавлении ссылки на службу управления.

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

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

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

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

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

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

                var openId = new IdentityProvider
                {
                    DisplayName = identityProviderName,
                    Description = identityProviderName,
                    WebSSOProtocolType = "OpenId",
                    IssuerId = issuer.Id
                };
    
                svc.AddObject("IdentityProviders", openId);
    
    
    
  4. Измените адрес входа поставщика удостоверений. Здесь в этом качестве используется адрес www.myopenid.com. Среди других поставщиков удостоверений OpenID можно назвать службы Yahoo! и Google. Они используют другие адреса входа. Это соответственно https://open.login.yahooapis.com/openid/op/auth и https://www.google.com/accounts/o8/ud.

                var openIdAddress = new IdentityProviderAddress
                {
                    Address = "https://www.myopenid.com/server",
                    EndpointType = "SignIn"
                };
    
                svc.AddRelatedObject(openId, "IdentityProviderAddresses", openIdAddress);
                svc.SaveChanges();
    
    
    
  5. Опубликуйте поставщик удостоверений для проверяющих сторон, исключая саму службу управления.

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

Добавления сообщества

ДОБАВИТЬ
Показ:
© 2014 Microsoft