Compartilhar via


Como usar o Serviço de Gerenciamento do ACS para configurar um provedor de identidade OpenID

Atualizado: 19 de junho de 2015

Aplica-se ao Azure

Aplica-se A

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

  • OpenID 2.0

Resumo

Este tópico mostra as etapas básicas, necessárias para adicionar provedores de identidade que utilizam o 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, nos referimos à especificação OpenID 2.0 porque essa é a versão de especificação compatível com o ACS.

Sumário

  • Objetivos

  • Visão geral

  • Resumo das etapas

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

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

  • Etapa 3 – Implementar o cliente do Serviço de Gerenciamento

  • Etapa 4 – Adicionar um provedor de identidade

Objetivos

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

  • Fazer uma lista das 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 a funcionalidade que está disponível por meio da interface do usuário do Portal de Gerenciamento. Tudo que pode ser realizado no Portal de Gerenciamento também pode ser realizado com o Serviço de Gerenciamento. Adicionar provedores de identidade OpenID ACS permite que você salve no desenvolvimento e na manutenção do mecanismo de gerenciamento de identidade da escala da Internet. Para executar a tarefa de adicionar um provedor de identidade OpenID, desenvolva um código que siga procedimentos específicos. Este tópico descreve essas etapas básicas.

Resumo das etapas

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

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

  • Etapa 3 – Implementar o cliente do Serviço de Gerenciamento

  • Etapa 4 – Adicionar um provedor de identidade

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

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

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

  • A senha da identidade do Serviço de Gerenciamento — Para obter a senha da identidade do serviço de gerenciamento:

    1. Faça logon no Portal de Gerenciamento do Serviço de Controle do Acesso.

    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 real do serviço).

    4. Na seção Credenciais, clique no link da Chave Simétrica ou da Senha. O valor é o mesmo para os dois. Esta é a senha.

  • O namespace do serviço

  • Nome de host do ACS — Geralmente accesscontrol.windows.net.

Depois de coletar as informações necessárias, siga estas 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 as informações coletadas anteriormente às variáveis de escopo do módulo usando um código semelhante ao indicado abaixo.

        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 assemblies e serviços necessários

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

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

  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 tem uma aparência semelhante a esta:

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

  3. Adicione as seguintes declarações.

    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. Ela pode variar em seu caso se você tiver alterado os valores padrão quando criou seu aplicativo de console ou adicionou a referência ao serviço de gerenciamento.

Etapa 3 – Implementar o cliente do Serviço de Gerenciamento

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

Para implementar o cliente do Serviço de Gerenciamento

  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 auxiliares. 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 adiciona o provedor de identidade OpenID usando o cliente do Serviço de Gerenciamento que você criou anteriormente.

Para adicionar um provedor de identidade OpenID

  1. No método Principal, inicialize o cliente do 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. Neste exercício, você usará www.myopenid.com como o endereço de entrada. Outros provedores de identidade OpenID incluem Google e Yahoo!, que têm seus próprios endereços de logon. Eles são https://www.google.com/accounts/o8/ud e https://open.login.yahooapis.com/openid/op/auth, respectivamente.

                var openIdAddress = new IdentityProviderAddress
                {
                    Address = "https://www.myopenid.com/server",
                    EndpointType = "SignIn"
                };
    
                svc.AddRelatedObject(openId, "IdentityProviderAddresses", openIdAddress);
                svc.SaveChanges();
    
  5. Torne o provedor de identidade disponível para 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);