Como usar o Serviço de Gerenciamento do ACS para configurar identidades de serviço

Atualizado em: 19 de junho de 2015

Aplica-se ao Azure

Aplica-se A

  • Access Control do Active Directory do Microsoft Azure (também conhecido como Access Control Service ou ACS)

Visão geral

Você pode configurar identidades de serviço ACS usando o Portal de Gerenciamento do ACS (para obter mais informações, consulte Identidades de Serviço) ou o Serviço de Gerenciamento do ACS. Trabalhar com o Serviço de Gerenciamento do ACS pode ser mais eficiente se você estiver criando uma interface do usuário personalizada para gerenciar o ACS ou se quiser automatizar a integração de um novo locatário para soluções saaS (software como serviço) multilocatário.

Etapas para configurar identidades de serviço usando o Serviço de Gerenciamento ACS

Importante

Antes de executar as etapas a seguir, verifique se o sistema atende a todos os requisitos de estrutura e plataforma do .NET que são resumidos nos pré-requisitos do ACS.

Para configurar identidades de serviço usando o Serviço de Gerenciamento do ACS, conclua as seguintes etapas:

  • Etapa 1 – Coletar informações de configuração do ACS

  • Etapa 2 – Criar um exemplo de aplicativo de console

  • Etapa 3 – Adicionar referências aos serviços e assemblies necessários

  • Etapa 4 – Implementar o cliente do Serviço de Gerenciamento

  • Etapa 5 – Adicionar uma identidade de serviço

Etapa 1 – Coletar informações de configuração do ACS

Você pode usar o Portal de Gerenciamento do ACS para coletar as informações de configuração necessárias. Para obter mais informações sobre como iniciar o Portal de Gerenciamento do ACS, consulte o Portal de Gerenciamento do ACS.

Para coletar informações de configuração do ACS

  1. Inicie o Portal de Gerenciamento do ACS. Para obter mais informações sobre como iniciar o Portal de Gerenciamento do ACS, consulte o Portal de Gerenciamento do ACS.

  2. Obtenha o valor da conta de serviço de gerenciamento do ACS. Você pode usar a conta padrão ManagementClient. Para exibir esse valor, no Portal de Gerenciamento do ACS, clique no serviço Gerenciamento na seção Administração na árvore no lado esquerdo da página.

  3. Obtenha o valor da senha da conta do Serviço de Gerenciamento do ACS. Para exibir esse valor, faça o seguinte:

    1. No Portal de Gerenciamento do ACS, clique no serviço Gerenciamento na seção Administração na árvore no lado esquerdo da página.

    2. Na página Serviço de gerenciamento, clique em ManagementClient em Contas do Serviço de Gerenciamento.

    3. Na página Editar Contas do Serviço de Gerenciamento, em Credenciais, clique em Senha.

    4. Na página Editar Credencial de Gerenciamento, copie o valor no campo Senha.

  4. Obtenha o valor do namespace do Azure. Você pode obter esse valor do portal do Azure ou da URL do Portal de Gerenciamento do ACS. Por exemplo, em http://contoso.accesscontrol.windows.net, o valor do namespace do Azure é contoso.

  5. Obtenha o valor do nome do host do ACS. Normalmente é accesscontrol.windows.net.

Etapa 2 – Criar um exemplo de aplicativo de console

Nesta etapa, você cria um aplicativo de console de exemplo que pode executar o código para adicionar suas identidades de serviço ACS.

Para criar um exemplo de aplicativo de console

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

  2. Adicione o código a seguir à classe Programa e atribua as variáveis serviceIdentityPasswordForManagement, serviceNamespace e acsHostName às informações de configuração apropriadas que você coletou na etapa acima.

    public const string serviceIdentityUsernameForManagement = "ManagementClient";
    public const string serviceIdentityPasswordForManagement = "My Password/Key for ManagementClient";
    public const string serviceNamespace = "MyNameSpaceNoDots";
    public const string acsHostName = "accesscontrol.windows.net";
    public const string acsManagementServicesRelativeUrl = "v2/mgmt/service/";
    static string cachedSwtToken;
    

Etapa 3 – Adicionar referências aos serviços e assemblies necessários

Nesta etapa, você 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. Clique com o botão direito do mouse em Referências, clique em Adicionar Referência e adicione uma referência a System.Web.Extensions.

    Observação

    Você talvez tenha que clicar com o botão direito do mouse no nome do exemplo de aplicativo de console no Gerenciador de Soluções, selecionar Propriedades e alterar a estrutura de destino de seu exemplo de aplicativo no .NET Framework 4 Client Profile (atribuído por padrão quando você cria um novo aplicativo de console) ao .NET Framework 4.

  2. Clique com o botão direito do mouse em Referências de Serviço, clique em Adicionar Referência de Serviço e 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, onde MyConsoleApplication é o nome de seu aplicativo de console e MyServiceReference é o nome de sua referência de serviço:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    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.Security.Cryptography;
    using System.Security.Cryptography.X509Certificates;
    using MyConsoleApplication.MyServiceReference;
    

Etapa 4 – Implementar o cliente do Serviço de Gerenciamento

Nesta etapa, você implementa o cliente do Serviço de Gerenciamento.

Para implementar o 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. Adicione o código a seguir à classe Programa para criar o método GetTokenWithWritePermission e os métodos auxiliares. GetTokenWithWritePermission e seus auxiliares adicionam 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 5 – Adicionar uma identidade de serviço

Nesta etapa, você adiciona uma identidade de serviço usando o cliente do Serviço de Gerenciamento que criou na etapa anterior. A identidade de serviço do ACS pode usar uma senha, uma chave simétrica ou um certificado X.509 como tipo de credencial.

Para adicionar uma identidade de serviço

  1. Inicialize o cliente do Serviço de Gerenciamento adicionando o seguinte código ao método Principal na classe Programa:

    ManagementService svc = CreateManagementServiceClient();
    
  2. Realize um dos seguintes procedimentos:

    • Para adicionar uma identidade de serviço associada a uma senha e salvar as alterações, adicione o seguinte código ao método Principal na classe Programa:

      Observação

      Você pode chamar essa identidade de serviço de “SampleServiceIdentity” e definir sua senha como “SampleServiceIdentityPassword”, como mostra o código abaixo.

                  string name = "SampleServiceIdentity";
                  string password = "SampleServiceIdentityPassword";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Password",
                      Usage = "Password",
                      Value = Encoding.UTF8.GetBytes(password),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Password", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
    • Para adicionar uma identidade de serviço associada a uma chave simétrica e salvar as alterações, adicione o seguinte código ao método Principal na classe Programa:

      Observação

      Você pode chamar essa identidade de serviço de “SampleServiceIdentity” e definir o valor de sua chave simétrica como “SampleServiceIdentityPassword”, como mostra o código abaixo.

                  string name = "SampleServiceIdentity";
                  string symKey = "SampleServiceIdentitySymmetricKey";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Symmetric",
                      Usage = "Signing",
                      Value = Convert.FromBase64String(symKey),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Sym Key", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
    • Para adicionar uma identidade de serviço associada a um certificado X.509 e salvar as alterações, adicione o seguinte código ao método Principal na classe Programa:

      Observação

      Você pode chamar essa identidade de serviço de “SampleServiceIdentity”, como mostra o código abaixo

      No código abaixo, substitua "Caminho completo do arquivo .CER" com um caminho totalmente qualificado para seu certificado X.509. Por exemplo, se um certificado chamado "ACS2ClientCertificate.cer" for salvo em C:\, o valor correto será "C:\ ACS2ClientCertificate.cer".

                  string name = "SampleServiceIdentity";
                  X509Certificate2 cert = new X509Certificate2(@"Full path to your .CER file");
      
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
      
                  startDate = cert.NotBefore.ToUniversalTime();
                  endDate = cert.NotAfter.ToUniversalTime();
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "X509Certificate",
                      Usage = "Signing",
                      Value = cert.GetRawCertData(),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Cert", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      

Consulte Também

Conceitos

Instruções do ACS