Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Atualizado: June 19, 2015
Aplica-se a: Azure
Aplica-se a
- Controle de Acesso do Microsoft Azure Active Directory (também conhecido como Serviço de Controle de Acesso ou ACS)
Visão geral
Você pode configurar certificados e chaves do ACS usando o Portal de Gerenciamento do ACS ou o Serviço de Gerenciamento do ACS. Trabalhar com o Serviço de Gerenciamento 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.
Para obter mais informações sobre como usar o Portal de Gerenciamento do ACS para configurar certificados e chaves, consulte Certificados e chaves.
Etapas para configurar certificados e chaves 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 plataforma e estrutura do .NET resumidos em Pré-requisitos do ACS.
Para configurar certificados e chaves usando o Serviço de Gerenciamento ACS, conclua as seguintes etapas:
Etapa 1 – Coletar informações de configuração do ACS
Etapa 2 – Criar um aplicativo de console de exemplo
Etapa 3 – Adicionar referências aos serviços e assemblies necessários
Etapa 4 – Implementar o cliente do serviço de gerenciamento
Etapa 5 - Instalar certificados e chaves
Adicionar um certificado de assinatura de token para seu namespace de controle de acesso
Adicionar um certificado de autenticação de token para um aplicativo de terceira parte confiável
Adicionar uma chave simétrica de assinatura de token para o namespace do Access Control
Adicionar uma chave simétrica de assinatura de token para um aplicativo de terceira parte confiável
Adicionar um certificado de criptografia de token
Adicionar um certificado de descriptografia de token
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, consulte Portal de Gerenciamento ACS.
Para coletar informações de configuração do ACS
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 do Access Control, selecione o namespace e clique em Gerenciar. (Ou clique em Namespaces do Access Control, selecione o namespace e clique em Gerenciar.)
Clique em Serviço de gerenciamento, clique em ManagementClient e clique em Senha.
Copie o valor no campo Senha .
Clique em Serviço de gerenciamento. Obtenha o valor do namespace de serviço e do nome do host do ACS. Se a URL do Serviço de Gerenciamento for
http://contoso.accesscontrol.windows.net
, o namespace será contoso e o nome do host será accesscontrol.windows.net.
Etapa 2 – Criar um aplicativo de console de exemplo
Nesta etapa, você cria um aplicativo de console de exemplo que pode executar o código para adicionar seus grupos de regras e regras do ACS.
Para criar um aplicativo de console de exemplo
Abra o Visual Studio 2012 e crie um novo projeto de aplicativo de console no modelo instalado do Windows .
Adicione o código a seguir à classe Program e atribua as variáveis serviceIdentityPasswordForManagement, serviceNamespace e acsHostName às informações de configuração apropriadas coletadas na etapa anterior.
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
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
Talvez seja necessário clicar com o botão direito do mouse no nome do aplicativo de console de exemplo no Gerenciador de Soluções, selecionar Propriedades e alterar a estrutura de destino do aplicativo de exemplo do Perfil do Cliente do .NET Framework 4 (atribuído por padrão quando você cria um novo aplicativo de console) para o .NET Framework 4.
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 do seu namespace e é semelhante à seguinte:
https:// SEUNAMESPACE.accesscontrol.windows.net/v2/mgmt/service
Adicione as seguintes declarações, em que MyConsoleApplication é o nome do aplicativo de console e MyServiceReference é o nome da referência de serviço:
using System; using System.IO; 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
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; }
Adicione o método GetTokenWithWritePermission e seus métodos auxiliares à classe Program . GetTokenWithWritePermission e seus auxiliares adicionam o token SWT OAuth ao cabeçalho Authorization 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; }
Passo 5 – Adicionar certificados e chaves
Adicionar um certificado de autenticação de token para o namespace do Access Control
Neste exemplo, você cria um certificado de assinatura X.509 para o namespace do Access Control.
Para adicionar um certificado de assinatura de token para todos os aplicativos de terceira parte confiável no namespace do Access Control
Inicialize o cliente do Serviço de Gerenciamento adicionando o seguinte código ao método Main na classe Program :
ManagementService svc = CreateManagementServiceClient();
Crie uma função auxiliar ReadBytesFromPfxFile para ler bytes do certificado X.509 adicionando o seguinte código à classe Program :
//Helper function to read bytes from your .pfx file public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword) { byte[] signingCertificate; using (FileStream stream = File.OpenRead(pfxFileName)) { using (BinaryReader br = new BinaryReader(stream)) { signingCertificate = br.ReadBytes((int)stream.Length); } } return signingCertificate; }
Para adicionar um certificado X.509 de assinatura de token, adicione o seguinte código ao método Main na classe Program :
Observação
Substitua "Caminho completo para o seu domínio . PFX" pelo caminho completo válido para o certificado X.509. Por exemplo, "C:\ ACS2ClientCertificate.pfx".
Substitua "MyCertificatePassword" pela senha do certificado X.509.X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", “MyCertificatePassword”); DateTime startDate, endDate; startDate = cert.NotBefore.ToUniversalTime(); endDate = cert.NotAfter.ToUniversalTime(); string pfxFileName = @"Full path to your .PFX file"; string pfxPassword = @"MyCertificatePassword"; byte[] signingCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword); ServiceKey serviceKey = new ServiceKey() { Type = "X509Certificate", Usage = "Signing", Value = signingCertificate, Password = Encoding.UTF8.GetBytes("MyCertificatePassword"), IsPrimary = false, StartDate = startDate.ToUniversalTime(), EndDate = endDate.ToUniversalTime() }; svc.AddToServiceKeys(serviceKey); svc.SaveChanges(SaveChangesOptions.Batch);
Adicionar um certificado de autenticação de token para um aplicativo de terceira parte confiável
Neste exemplo, você cria um certificado de autenticação X.509 que é atribuído a um aplicativo de terceira parte confiável específico.
Como adicionar um certificado de autenticação de token para um aplicativo de terceira parte confiável
Inicialize o cliente do Serviço de Gerenciamento adicionando o seguinte código ao método Main na classe Program :
ManagementService svc = CreateManagementServiceClient();
Crie uma função auxiliar ReadBytesFromPfxFile para ler bytes do certificado X.509 adicionando o seguinte código à classe Program :
//Helper function to read bytes from your .pfx file public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword) { byte[] signingCertificate; using (FileStream stream = File.OpenRead(pfxFileName)) { using (BinaryReader br = new BinaryReader(stream)) { signingCertificate = br.ReadBytes((int)stream.Length); } } return signingCertificate; }
Para adicionar um certificado X.509 de assinatura de token, adicione o seguinte código ao método Main na classe Program :
Observação
Substitua "Caminho completo para o seu domínio . PFX" com o caminho completo para o certificado X.509. Por exemplo, "C:\ ACS2ClientCertificate.pfx".
Substitua "MyCertificatePassword" pela senha do certificado X.509. Substitua "MyRelyingPartyApplication" pelo nome do aplicativo de terceira parte confiável.//Select an existing Relying Party Application by its name RelyingParty relyingParty = svc.RelyingParties.Where(m => m.Name == "MyRelyingPartyApplication").Single(); // Add a signing certificate X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", "MyCertificatePassword"); DateTime startDate, endDate; startDate = cert.NotBefore.ToUniversalTime(); endDate = cert.NotAfter.ToUniversalTime(); string pfxFileName = @"Full path to your .PFX file"; string pfxPassword = "MyCertificatePassword"; byte[] signingCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword); RelyingPartyKey relyingPartyKey = new RelyingPartyKey() { StartDate = startDate.ToUniversalTime(), EndDate = endDate.ToUniversalTime(), Type = "X509Certificate", Usage = "Signing", IsPrimary = true, Value = signingCertificate, Password = Encoding.UTF8.GetBytes("MyCertificatePassword") }; // Add the new signing certificate to the selected Relying Party Application svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey); //Save your relying party application svc.SaveChanges(SaveChangesOptions.Batch);
Adicionar uma chave simétrica de assinatura de token para o namespace do Access Control
Neste exemplo, você atribui essa chave simétrica de assinatura ao namespace do Access Control.
Para adicionar uma chave simétrica de assinatura de token para o namespace do Access Control
Inicialize o cliente do Serviço de Gerenciamento adicionando o seguinte código ao método Main na classe Program :
ManagementService svc = CreateManagementServiceClient();
Para adicionar uma chave simétrica de assinatura de token, adicione o seguinte código ao método Main na classe Program :
string symKey = "SampleTokenSigningSymmetricKey"; DateTime startDate, endDate; startDate = DateTime.UtcNow; endDate = DateTime.MaxValue; ServiceKey serviceKey = new ServiceKey() { Type = "Symmetric", Usage = "Signing", Value = Encoding.UTF8.GetBytes(symKey), StartDate = startDate.ToUniversalTime(), EndDate = endDate.ToUniversalTime() }; svc.AddToServiceKeys(serviceKey); svc.SaveChanges(SaveChangesOptions.Batch);
Adicionar uma chave simétrica de assinatura de token para um aplicativo de terceira parte confiável
Neste exemplo, você atribui sua nova chave simétrica de assinatura a um aplicativo de terceira parte confiável específico.
Para adicionar uma chave simétrica de assinatura de token para um aplicativo de terceira parte confiável
Inicialize o cliente do Serviço de Gerenciamento adicionando o seguinte código ao método Main na classe Program :
ManagementService svc = CreateManagementServiceClient();
Para adicionar uma chave simétrica de assinatura de token, adicione o seguinte código ao método Main na classe Program :
//Select a relying party application RelyingParty relyingParty = svc.RelyingParties.Where(m => m.Name == "MyRelyingPartyApplication").Single(); // Create a symmetric key string symKey = "SampleTokenSigningSymmetricKey"; DateTime startDate, endDate; startDate = DateTime.UtcNow; endDate = DateTime.MaxValue; RelyingPartyKey relyingPartyKey = new RelyingPartyKey() { Type = "Symmetric", Usage = "Signing", Value = Encoding.UTF8.GetBytes(symKey), StartDate = startDate.ToUniversalTime(), EndDate = endDate.ToUniversalTime() }; //Assign this symmetric key to the selected relying party application svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey); //Save your symmetric key svc.SaveChanges(SaveChangesOptions.Batch);
Adicionar um certificado de criptografia de token
Neste exemplo, você adiciona um certificado de criptografia de token X.509 para um aplicativo de terceira parte confiável específico.
Para adicionar um certificado de criptografia de token para um aplicativo de terceira parte confiável
Inicialize o cliente do Serviço de Gerenciamento adicionando o seguinte código ao método Main na classe Program :
ManagementService svc = CreateManagementServiceClient();
Para adicionar um certificado X.509 de criptografia de token, adicione o seguinte código ao método Main na classe Program :
Observação
Substitua "Caminho completo para o seu domínio . CER file" com o caminho completo para um certificado X.509. Por exemplo, "C:\ ACS2ClientCertificate.cer".
Substitua "MyCertificatePassword" pela senha do certificado X.509. Substitua "MyRelyingPartyApplication" pelo nome de um aplicativo de terceira parte confiável.//Select a relying party application RelyingParty relyingParty = svc.RelyingParties.Where(m => m.Name == "MyRelyingPartyApplication").Single(); // Add an encryption certificate X509Certificate2 cert = new X509Certificate2(@"Full path to your .CER file"); DateTime startDate, endDate; startDate = cert.NotBefore; endDate = cert.NotAfter; RelyingPartyKey relyingPartyKey = new RelyingPartyKey() { Type = "X509Certificate", Usage = "Encrypting", Value = cert.GetRawCertData(), StartDate = startDate.ToUniversalTime(), EndDate = endDate.ToUniversalTime() }; //Assign this encryption certificate to the selected relying party application svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey); //Save your encryption certificate svc.SaveChanges(SaveChangesOptions.Batch);
Adicionar um certificado de descriptografia de token
Neste exemplo, você adiciona um certificado de descriptografia de token X.509 atribuído ao namespace do Access Control.
Para adicionar um certificado de assinatura de token para todos os aplicativos de terceira parte confiável no namespace do Access Control
Inicialize o cliente do Serviço de Gerenciamento adicionando o seguinte código ao método Main na classe Program :
ManagementService svc = CreateManagementServiceClient();
Crie uma função auxiliar ReadBytesFromPfxFile para ler bytes do certificado X.509 adicionando o seguinte código à classe Program :
//Helper function to read bytes from your .pfx file public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword) { byte[] decryptionCertificate; using (FileStream stream = File.OpenRead(pfxFileName)) { using (BinaryReader br = new BinaryReader(stream)) { decryptionCertificate = br.ReadBytes((int)stream.Length); } } return decryptingCertificate; }
Para adicionar um certificado X.509 de assinatura de token, adicione o seguinte código ao método Main na classe Program :
Observação
Substitua "Caminho completo para o seu domínio . PFX" no código abaixo com o caminho completo válido para o certificado X.509. Por exemplo, se um certificado chamado ACS2ClientCertificate.pfx for salvo em C:, o valor correto será "C:\ ACS2ClientCertificate.pfx".
Substitua "MyCertificatePassword" no código abaixo pela senha correta para seu certificado X.509.X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", “MyCertificatePassword”); DateTime startDate, endDate; startDate = cert.NotBefore.ToUniversalTime(); endDate = cert.NotAfter.ToUniversalTime(); string pfxFileName = @"Full path to your .PFX file"; string pfxPassword = @"MyCertificatePassword"; byte[] decryptionCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword); ServiceKey serviceKey = new ServiceKey() { Type = "X509Certificate", Usage = "Encrypting", Value = decryptionCertificate, Password = Encoding.UTF8.GetBytes("MyCertificatePassword"), StartDate = startDate.ToUniversalTime(), EndDate = endDate.ToUniversalTime() }; svc.AddToServiceKeys(serviceKey); svc.SaveChanges(SaveChangesOptions.Batch);