Como usar o Serviço de Gerenciamento do ACS para configurar o AD FS 2.0 como um provedor de identidade Enterprise

Atualizado em: 19 de junho de 2015

Aplica-se ao Azure

Aplica-se A

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

  • Serviços de Federação do Active Directory® (AD FS) 2.0

Resumo

Este tópico explica como adicionar o provedor de identidade a um namespace ou aplicativo de terceira parte confiável. Para executar essa tarefa, você pode usar o Serviço de Gerenciamento do ACS. O Serviço de Gerenciamento é particularmente útil quando você está criando uma interface do usuário personalizada para gerenciar o ACS e ao automatizar a adição de novos locatários 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 requisitos e as informações de configuração.

  • Listar as etapas necessárias.

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

Visão geral

O Serviço de Gerenciamento do ACS é um serviço Web que expõe os recursos do ACS ao código. O Serviço de Gerenciamento do ACS pode acessar todos os recursos do ACS, incluindo o subconjunto de recursos que está disponível na interface do usuário do Portal de Gerenciamento do ACS.

Adicionar a Microsoft como um provedor de identidade ao ACS permite reutilizar o investimento feito no gerenciamento de identidades corporativas para soluções baseadas em nuvem. Para configurar como provedor de identidade, você precisa escrever um código que siga as 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 explica 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 Gerenciamento. O valor padrão é ManagementClient.

  • A senha da identidade do Serviço de Gerenciamento.

  • Nome do namespace.

  • Nome do host do ACS: accesscontrol.windows.net

  • Cadeia de caracteres de certificado de assinatura: obtenha a cadeia de caracteres de certificado de assinatura do AD FS de sua implantação.

Para localizar o nome de usuário e a senha do Serviço de Gerenciamento, use o seguinte procedimento.

  1. Vá para o Portal de Gerenciamento do Microsoft Azure (https://manage.WindowsAzure.com), entre e clique em Active Directory. (Dica de solução de problemas: o item "Active Directory" está ausente ou não está disponível) Para gerenciar um namespace Controle de Acesso, selecione o namespace e clique em Gerenciar. (Or, clique em Namespaces do Access Control, selecione o namespace e clique em Gerenciar.)

  2. Clique em Serviço de Gerenciamento e selecione um serviço de gerenciamento, como ManagementClient.

  3. O valor do campo Nome é o nome de usuário de identidade do Serviço de Gerenciamento.

  4. Na seção Credenciais, clique em Senha. O valor no campo Senha é a senha da identidade do Serviço de Gerenciamento.

Depois de coletar as informações necessárias, siga estas etapas para criar um aplicativo de console de exemplo que executará o código a ser adicionado como um provedor de identidade:

  1. Inicie Visual Studio e crie um novo projeto de aplicativo de console.

  2. Na classe Programa, atribua os valores das informações de configuração às variáveis com escopo do módulo. O seguinte exemplo de código mostra como isso deve ser feito.

    static string serviceIdentityUsernameForManagement = "ManagementClient";
    static string serviceIdentityPasswordForManagement = "ManagementClientPasswordValue";
    
    static string serviceNamespace = "MyNameSpaceNoDots";
    static string acsHostName = "accesscontrol.windows.net";
    
    static string signingCertificate = "Very long string representing ADFS signing certificate";
    
    static string cachedSwtToken;
    static string identityProviderName = "My Other ADFS Identity Provider";
    

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;
    

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 managementServiceHead = "v2/mgmt/service/";
                string managementServiceEndpoint = 
    string.Format("https://{0}.{1}/{2}", 
    serviceNamespace, 
    acsHostName, 
    managementServiceHead);
                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, 
     string.Format("OAuth {0}", 
     cachedSwtToken));
            }
    
            private static string GetTokenFromACS()
            {
                // request a token from ACS
                WebClient client = new WebClient();
                client.BaseAddress = string.Format("https://{0}.{1}", 
          serviceNamespace, 
          acsHostName);
    
                NameValueCollection values = new NameValueCollection();
    
                values.Add("grant_type", "password");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("username", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("password", serviceIdentityPasswordForManagement);
    
                byte[] responseBytes = 
    client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", 
          "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

Essa etapa é adicionada como um provedor de identidade usando o proxy do Serviço de Gerenciamento criado anteriormente.

Para adicionar o AD FS 2.0 como um provedor de identidade

  1. 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
    };
           svc.AddToIssuers(issuer);
           svc.SaveChanges(SaveChangesOptions.Batch);
    
  3. Crie um provedor de identidade.

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

    IdentityProviderKey identityProviderKey = new IdentityProviderKey()
    {
        DisplayName = "SampleIdentityProviderKeyDisplayName",
        Type = "X509Certificate",
        Usage = "Signing",
        Value = Convert.FromBase64String(signingCertificate),
        IdentityProvider = identityProvider,
        StartDate = startDate,
        EndDate = endDate,
    };
          svc.AddRelatedObject(identityProvider, 
    "IdentityProviderKeys", 
    identityProviderKey);
    
  5. Atualize o endereço de entrada do provedor de identidade.

    IdentityProviderAddress realm = new IdentityProviderAddress()
    {
        Address = "http://SampleIdentityProvider.com/sign-in/",
        EndpointType = "SignIn",
        IdentityProvider = identityProvider,
    };
    svc.AddRelatedObject(identityProvider, "IdentityProviderAddresses", realm);
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  6. 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 = identityProvider.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    

Etapa 5 – Testar seu trabalho

Para testar seu trabalho

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

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

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

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

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

  6. Clique em Salvar.

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