Partilhar via


Como: Utilizar o Serviço de Gestão ACS para configurar um Fornecedor de Identidade OpenID

Atualizado: 19 de junho de 2015

Aplica-se a: Azure

Aplica-se A

  • Microsoft® Azure™ Controlo de Acesso Service (ACS)

  • OpenID 2.0

Resumo

Este tópico descreve os passos básicos necessários para a adição de fornecedores de identidade que suportam o protocolo OpenID. Os fornecedores de identidade OpenID podem ser adicionados ao ACS utilizando o Serviço de Gestão. Os fornecedores de identidade OpenID não podem ser adicionados utilizando o Portal de Gestão ACS. Neste tópico referimo-nos à especificação OpenID 2.0 porque esta é a versão de especificação que a ACS suporta.

Conteúdos

  • Objetivos

  • Descrição Geral

  • Resumo dos Passos

  • Passo 1 – Recolher informações de configuração

  • Passo 2 - Adicionar referências aos serviços e assembleias exigidos

  • Passo 3 – Implementar o Serviço de Gestão Cliente

  • Passo 4 - Adicionar um Fornecedor de Identidade

Objetivos

  • Identifique os pré-requisitos necessários e informações de configuração.

  • Listar os passos necessários para adicionar um fornecedor de identidade OpenID.

Descrição Geral

O Serviço de Gestão é um serviço web que é um dos componentes-chave da ACS. O Serviço de Gestão expõe a funcionalidade que está disponível através da interface de utilizador do Portal de Gestão. Tudo o que possa ser realizado no Portal de Gestão também pode ser feito através do Serviço de Gestão. A adição de fornecedores de identidade OpenID ACS permite-lhe economizar no desenvolvimento e manutenção do mecanismo de gestão de identidade da escala de Internet. Para realizar a tarefa de adicionar um fornecedor de identidade OpenID, escreva código que siga passos específicos. Este tópico descreve estes passos básicos.

Resumo dos Passos

  • Passo 1 – Recolher informações de configuração

  • Passo 2 - Adicionar referências aos serviços e assembleias exigidos

  • Passo 3 – Implementar o Serviço de Gestão Cliente

  • Passo 4 - Adicionar um Fornecedor de Identidade

Passo 1 – Recolher informações de configuração

Este passo identifica e mostra como recolher as informações de configuração necessárias. Tem de recolher as seguintes informações:

  • Nome de utilizador de identidade do Serviço de GestãoManagementClient.

  • Palavra-passe de identidade do Serviço de Gestão — Para obter a senha de identidade do serviço de gestão:

    1. Inicie sessão no Portal de Gestão de Serviços Controlo de Acesso.

    2. Na secção Administração , clique no link Do Serviço de Gestão .

    3. Na página do Serviço de Gestão , clique no link ManagementClient (ManagementClient é o nome de utilizador real para o serviço).

    4. Na secção Credenciais , clique na Chave Simétrica ou na ligação Palavra-Passe . O valor em cada um é o mesmo. Esta é a senha.

  • Espaço de nome do seu serviço

  • ACS nome de anfitrião - Geralmente accesscontrol.windows.net.

Depois de recolher as informações necessárias, siga estas etapas para criar uma aplicação de consola de amostra que irá executar o código para adicionar o fornecedor de identidade OpenID:

  1. Abra Visual Studio ® 2010 e crie um novo projeto de aplicação de consola.

  2. Na classe Programa , atribua as informações recolhidas anteriormente às variáveis de âmbito do módulo, utilizando 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;

Passo 2 - Adicionar referências aos serviços e assembleias exigidos

Este passo identifica e adiciona as dependências necessárias aos serviços e assembleias.

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

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

  2. Adicione uma referência de serviço ao Serviço de Gestão. O URL do Serviço de Gestão é exclusivo do seu espaço de nome e parece semelhante ao seguinte:

    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;
    

Note a última declaração, ConsoleApplication1.ServiceReference1. Pode variar no seu caso se tiver alterado os valores predefinidos quando criou a aplicação da consola ou quando adicionou a referência ao serviço de gestão.

Passo 3 – Implementar o Serviço de Gestão Cliente

Este passo cria um método que engloba a implementação do cliente do Serviço de Gestão.

Implementar o cliente do Serviço de Gestão

  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. Implementar o método GetTokenWithWritePermission e os seus métodos de ajuda. Adicionará o token SWT OAuth ao cabeçalho de autorização do pedido 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;
    
            }
    

Passo 4 - Adicionar um Fornecedor de Identidade

Este passo adiciona um fornecedor de identidade OpenID utilizando o cliente do Serviço de Gestão que criou anteriormente.

Para adicionar um fornecedor de identidade OpenID

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Adicione o seu fornecedor de identidade como emitente.

                Issuer issuer = new Issuer
                {
                    Name = identityProviderName
                };
                svc.AddToIssuers(issuer);
                svc.SaveChanges(SaveChangesOptions.Batch);
    
  3. Criar um fornecedor 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 inscrição do fornecedor de identidade. Neste exercício utilizará www.myopenid.com como endereço de inscrição. Outros fornecedores de identidade OpenID incluem google e Yahoo!, e eles têm os seus próprios endereços de inscrição. 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. Disponibilizar o fornecedor de identidade às partes dependentes, com exceção do Serviço de Gestão.

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