Exportar (0) Imprimir
Expandir Tudo

Como: Usar o Serviço de gerenciamento para configurar um provedor de identidade OpenID

Publicado: abril de 2011

Atualizado: maio de 2011

Aplica-se a: Windows Azure

Aplica-se a

  • Serviço Controle de Acesso (ACS) do Microsoft® Windows Azure™ AppFabric

  • OpenID 2.0

Resumo

Esse tópico descreve as etapas básicas necessárias para a adição de provedores de identidade que ofereçam suporte ao protocolo OpenID. Os provedores de identidade OpenID podem ser adicionados ao ACS usando o Serviço de gerenciamento. Os provedores de identidade OpenID não podem ser adicionados usando o Portal de gerenciamento do ACS. Neste tópico, consultamos a especificação OpenID 2.0 porque essa é a versão da especificação que o ACS suporta.

Conteúdo

  • Objetivos

  • Visão geral

  • Resumo de etapas

  • Etapa 1 – Coletar informações de configuração

  • Etapa 2 – Adicionar referências aos serviços e conjuntos necessários

  • Etapa 3 – Implementar o Serviço de gerenciamento cliente

  • Etapa 4 – Adicionar um provedor de identidade

Objetivos

  • Identificar os pré-requisitos e as informações de configuração necessárias.

  • Listar as etapas necessárias para adicionar um provedor de identidade OpenID.

Visão geral

O Serviço de Gerenciamento é um serviço Web que é um dos principais componentes do ACS. O Serviço de gerenciamento expõe recursos que estão disponíveis por meio da interface de usuário do Portal de gerenciamento. Tudo que pode ser realizado no Portal de gerenciamento também pode ser feito usando o Serviço de gerenciamento. A adição de provedores de identidade OpenID ACS permite que você economize no desenvolvimento e na manutenção do mecanismo de gerenciamento da identidade em escala de Internet. Para realizar a tarefa de adicionar um provedor de identidade OpenID, escreva o código que acompanha as etapas específicas. Esse tópico descreve essas etapas básicas.

Resumo de etapas

  • Etapa 1 – Coletar informações de configuração

  • Etapa 2 – Adicionar referências aos serviços e conjuntos necessários

  • Etapa 3 – Implementar o Serviço de gerenciamento cliente

  • Etapa 4 – Adicionar um provedor de identidade

Etapa 1 – Coletar informações de configuração

Essa etapa identifica e mostra como coletar as informações de configuração necessárias. Você precisa coletar as seguintes informações:

  • nome de usuário da identidade do Serviço de gerenciamentoManagementClient.

  • senha da identidade do Serviço de gerenciamento— para obter a senha da identidade do serviço para o serviço de gerenciamento:

    1. Efetue logon no Portal de gerenciamento do Serviço Controle de Acesso (http://go.microsoft.com/fwlink/?LinkID=129428).

    2. Na seção Administração, clique no link Serviço de gerenciamento.

    3. Na página Serviço de gerenciamento, clique no link ManagementClient (ManagementClient é o nome de usuário atual para o serviço).

    4. Na seção Credenciais, clique no link de Chave simétrica ou Senha. O valor em cada um é o mesmo. Esta é a senha.

  • Seu namespace de serviço

  • nome do host ACS— geralmente accesscontrol.windows.net.

Depois de coletar as informações necessárias, siga essas etapas para criar um aplicativo de console de exemplo que executará o código para adicionar o provedor de identidade OpenID:

  1. Abra o Visual Studio® 2010 e crie um novo projeto de aplicativo de console.

  2. Na classe Programa, atribua a informação coletada anteriormente às variáveis de escopo do módulo, usando um código semelhante ao seguinte.


        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;


Etapa 2 – Adicionar referências aos serviços e conjuntos necessários

Esta etapa identifica e adiciona as dependências necessárias aos serviços e conjuntos.

Para adicionar as dependências necessárias aos serviços e conjuntos

  1. Adicione uma referência a System.Web.Extensions.

  2. Adicione uma referência de serviço ao Serviço de gerenciamento. A URL do Serviço de gerenciamento é exclusiva para seu namespace e se parece com:

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

  3. Adicione as declarações a seguir.

    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;
    
    

Observe a última declaração ConsoleApplication1.ServiceReference1. Poderá variar no seu caso se você tiver alterado os valores padrão ao criar o aplicativo console ou ao adicionar a referência para o serviço de gerenciamento.

Etapa 3 – Implementar o Serviço de gerenciamento cliente

Esta etapa cria um método que engloba a implementação do Serviço de gerenciamento cliente.

Para implementar o Serviço de gerenciamento cliente

  1. Adicione o seguinte método à classe Programa.

    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. Implemente o método GetTokenWithWritePermission e seus métodos de ajuda. Ele adicionará o token SWT OAuth ao cabeçalho de Autorização da solicitação 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;
    
            }
    
    
    

Etapa 4 – Adicionar um provedor de identidade

Esta etapa cria um provedor de identidade OpenID usando o Serviço de gerenciamento cliente criado anteriormente.

Para adicionar um provedor de identidade OpenID

  1. Dentro do método Principal, inicialize o cliente Serviço de gerenciamento.

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. Adicione seu provedor de identidade como o emissor.

                Issuer issuer = new Issuer
                {
                    Name = identityProviderName
                };
                svc.AddToIssuers(issuer);
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    
    
  3. Crie um provedor de identidade.

                var openId = new IdentityProvider
                {
                    DisplayName = identityProviderName,
                    Description = identityProviderName,
                    WebSSOProtocolType = "OpenId",
                    IssuerId = issuer.Id
                };
    
                svc.AddObject("IdentityProviders", openId);
    
    
    
  4. Atualize o endereço de entrada do provedor de identidade. Nesse exercício, você usará o www.myopenid.com como o endereço de autenticação. Outros provedores de identidade OpenID incluem o Google e o Yahoo!, que têm seus próprios endereços de autenticação. São eles, respectivamente: https://www.google.com/accounts/o8/ud e https://open.login.yahooapis.com/openid/op/auth.

                var openIdAddress = new IdentityProviderAddress
                {
                    Address = "https://www.myopenid.com/server",
                    EndpointType = "SignIn"
                };
    
                svc.AddRelatedObject(openId, "IdentityProviderAddresses", openIdAddress);
                svc.SaveChanges();
    
    
    
  5. Disponibilize o provedor de identidade para as terceiras partes confiáveis, exceto o Serviço de Gerenciamento.

                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);
    
    
    

Mostrar:
© 2014 Microsoft