Exportar (0) Imprimir
Expandir Tudo
Expandir Minimizar

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

Publicado: abril de 2011

Atualizado: fevereiro de 2014

Aplica-se a: Azure

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

  • Facebook

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 em http://portal.windows.net (http://go.microsoft.com/fwlink/?LinkID=129428) ou automaticamente com o Serviço de Gerenciamento ACS. O Serviço de Gerenciamento é muito útil, por exemplo, na criação de uma interface de usuário personalizada para gerenciar o ACS e na automatização da inclusão de novos locatários para soluções SaaS (software como serviço) com vários locatários.

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

  • Etapa 4 – Adicionar um provedor de identidade

  • Etapa 5 – Testar seu trabalho

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

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ê economize com o desenvolvimento e a manutenção do mecanismo de gerenciamento de identidade na 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.

  • 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

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 do Serviço de Gerenciamento do 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 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.

  • ID e segredo do aplicativo do Facebook — 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";

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

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

Esta etapa adiciona o Facebook como um provedor de identidade usando o proxy do Serviço de Gerenciamento criado anteriormente.

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

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

  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.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2014 Microsoft