Exportar (0) Imprimir
Expandir Tudo
Expandir Minimizar

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

Publicado: abril de 2011

Atualizado: março de 2015

Aplica-se a: Azure

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

  • OpenID 2.0

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 de OpenID não podem ser adicionados com o Portal de Gerenciamento ACS. Neste tópico, fazemos referência à especificação do OpenID 2.0 porque essa é a versão de especificação para o ACS.

  • Objetivos

  • Visão geral

  • Resumo de 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

  • 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.

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 ao ACS evita que você precise desenvolver e manter o mecanismo de gerenciamento de identidade na 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.

  • 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

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;


Esta etapa identifica e adiciona 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://SEUNAMESPACE.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.

Esta etapa cria um método que encapsula a implementação do 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;
    
            }
    
    
    

Esta etapa adiciona o provedor de identidade OpenID usando o cliente do Serviço de Gerenciamento que você criou anteriormente.

  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 logon. Outros provedores de identidade OpenID incluem Google e Yahoo!, que têm seus próprios endereços de logon. 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. 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);
    
    
    

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2015 Microsoft