Compartilhar via


Como usar o Serviço de Gerenciamento do ACS para configurar o Facebook como um provedor de identidade da Internet

Atualizado: 19 de junho de 2015

Aplica-se ao Azure

Aplica-se A

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

  • Facebook

Resumo

Este tópico mostra as etapas básicas, necessárias para adicionar o Facebook como um provedor de identidade. O Facebook pode ser adicionado como um provedor de identidade ao ACS usando o Portal de Gerenciamento ou pode ser automatizado com o Serviço de Gerenciamento do ACS. Trabalhar com o Serviço de Gerenciamento é útil, por exemplo, em cenários em que você está criando uma interface de usuário personalizada para gerenciar o ACS ou ao automatizar a integração de um novo locatário para soluções SaaS (Software como serviço) multilocatário.

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 proxy do serviço de gerenciamento

  • Etapa 4 – Adicionar um provedor de identidade

  • Etapa 5 – Testar seu trabalho

Objetivos

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

  • Fazer uma lista das etapas necessárias para adicionar o Facebook como um provedor de identidade.

  • Verificar se a configuração foi bem-sucedida.

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 de 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 o Facebook como um provedor de identidade ao 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 configurar o Facebook como um provedor de identidade, é necessário desenvolver um código que siga etapas específicas. 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 proxy do serviço de gerenciamento

  • Etapa 4 – Adicionar um provedor de identidade

  • Etapa 5 – Testar seu trabalho

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 do host do ACS — geralmente accesscontrol.windows.net.

  • ID do aplicativo do Facebook e segredo do aplicativo — siga as instruções em Como configurar o Facebook como um provedor de identidade.

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 Facebook como um provedor de identidade:

  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 = "My Password for my ManagementClient";

static string serviceNamespace = "MyNameSpaceNoDots";
static string acsHostName = "accesscontrol.windows.net";
static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";


static string cachedSwtToken;
static string identityProviderName = "Facebook";

static string facebookAppId = "Your Facebook AppID";
static string facebookAppSecret = "Your Facebook Secret";

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 que a última declaração, ConsoleApplication1.ServiceReference1, pode variar no seu caso, se você tiver alterado os valores padrão ao criar seu aplicativo de console ou ao adicionar a referência ao serviço de gerenciamento.

Etapa 3 – Implementar o proxy do serviço de gerenciamento

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

Para implementar o proxy 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 Facebook como um provedor de identidade usando o proxy do Serviço de Gerenciamento criado anteriormente.

Para adicionar o Facebook como um provedor de identidade

  1. No método Principal, inicialize o proxy do Serviço de Gerenciamento.

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

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

    var facebook = new IdentityProvider
    {
        DisplayName = identityProviderName,
        LoginLinkName = "Facebook",
        LoginParameters = "email",
        WebSSOProtocolType = "Facebook",
        IssuerId = issuer.Id
    };
    
    svc.AddObject("IdentityProviders", facebook);
    
  4. Crie uma chave de autenticação de provedor de identidade com base no certificado que você obteve anteriormente.

    var facebookKeys = new[]
        {
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationId",
                    Value = Encoding.UTF8.GetBytes(facebookAppId)
                },
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationSecret",
                    Value = Encoding.UTF8.GetBytes(facebookAppSecret)
                }
        };
    
    foreach (var key in facebookKeys)
    {
        svc.AddRelatedObject(facebook, "IdentityProviderKeys", key);
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  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 = facebook.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    

Etapa 5 – Testar seu trabalho

Para testar seu trabalho

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

  2. Na página Serviço de Controle de Acesso, clique no link Grupos de Regras na seção Relações de Confiança.

  3. Clique em qualquer uma das regras disponíveis.

  4. Na página Editar Grupo de Regras, clique no link Adicionar Regra.

  5. Na página Adicionar Regra de Declaração, escolha o provedor de identidade recém-adicionado na lista suspensa da seção Emissor da Declaração.

  6. Deixe os valores restantes com as definições padrão.

  7. Clique em Salvar.

Você acaba de criar uma regra de passagem para o provedor de identidade.