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.
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.)
Clique em Serviço de Gerenciamento e selecione um serviço de gerenciamento, como ManagementClient.
O valor do campo Nome é o nome de usuário de identidade do Serviço de Gerenciamento.
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:
Inicie Visual Studio e crie um novo projeto de aplicativo de console.
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
Adicione uma referência a System.Web.Extensions.
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
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
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; }
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
Inicialize o proxy do Serviço de Gerenciamento.
ManagementService svc = CreateManagementServiceClient();
Adicione seu provedor de identidade como o emissor.
Issuer issuer = new Issuer { Name = identityProviderName }; svc.AddToIssuers(issuer); svc.SaveChanges(SaveChangesOptions.Batch);
Crie um provedor de identidade.
IdentityProvider identityProvider = new IdentityProvider() { DisplayName = identityProviderName, Description = identityProviderName, WebSSOProtocolType = "WsFederation", IssuerId = issuer.Id }; svc.AddObject("IdentityProviders", identityProvider);
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);
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);
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
Na página Serviço de Controle de Acesso, clique no link Grupos de Regras na seção Relações de Confiança.
Clique em qualquer uma das regras disponíveis.
Na página Editar Grupo de Regras, clique no link Adicionar Regra.
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.
Deixe os valores restantes com as definições padrão.
Clique em Salvar.
Você acaba de criar uma regra de passagem para o provedor de identidade.