Como usar o Serviço de Gerenciamento do ACS para configurar um provedor de identidade OpenID
Atualizado: 19 de junho de 2015
Aplica-se ao Azure
Aplica-se A
Serviço de Controle de Acesso (ACS) do Microsoft® Azure™
OpenID 2.0
Resumo
Este tópico mostra as etapas básicas, necessárias para adicionar provedores de identidade que utilizam o protocolo OpenID. Os provedores de identidade OpenID podem ser adicionados ao ACS usando o Serviço de Gerenciamento. Os provedores de identidade OpenID não podem ser adicionados usando o Portal de Gerenciamento do ACS. Neste tópico, nos referimos à especificação OpenID 2.0 porque essa é a versão de especificação compatível com o ACS.
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 cliente do Serviço de Gerenciamento
Etapa 4 – Adicionar um provedor de identidade
Objetivos
Identificar os pré-requisitos e as informações de configuração.
Fazer uma lista das etapas necessárias para adicionar um provedor de identidade OpenID.
Visão geral
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 do 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 provedores de identidade OpenID ACS permite que você salve no desenvolvimento e na manutenção do mecanismo de gerenciamento de identidade da escala da Internet. Para executar a tarefa de adicionar um provedor de identidade OpenID, desenvolva um código que siga procedimentos específicos. 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 cliente do Serviço de Gerenciamento
Etapa 4 – Adicionar um provedor de identidade
Etapa 1 – Coletar informações de configuração
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 Gerenciamento — ManagementClient.
A senha da identidade do Serviço de Gerenciamento — Para obter a senha da identidade do serviço de gerenciamento:
Faça logon no Portal de Gerenciamento do Serviço de Controle do Acesso.
Na seção Administração, clique no link Serviço de Gerenciamento.
Na página Serviço de Gerenciamento, clique no link ManagementClient (ManagementClient é o nome de usuário real do serviço).
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.
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 provedor de identidade OpenID:
Abra o Visual Studio® 2010 e crie um novo projeto de aplicativo de console.
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 = "...update to your password...";
static string serviceNamespace = "...update to your namespace...";
static string acsHostName = "accesscontrol.windows.net";
static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";
static string identityProviderName = "My Open ID Identity Provider";
static string cachedSwtToken;
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; using System.Globalization; using System.Runtime.Serialization.Json; using ConsoleApplication1.ServiceReference1;
Observe a última declaração, ConsoleApplication1.ServiceReference1. Ela pode variar em seu caso se você tiver alterado os valores padrão quando criou seu aplicativo de console ou adicionou a referência ao serviço de gerenciamento.
Etapa 3 – Implementar o cliente do Serviço de Gerenciamento
Esta etapa cria um método que encapsula a implementação do 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; }
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; }
Etapa 4 – Adicionar um provedor de identidade
Esta etapa adiciona o provedor de identidade OpenID usando o cliente do Serviço de Gerenciamento que você criou anteriormente.
Para adicionar um provedor de identidade OpenID
No método Principal, inicialize o cliente 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.
var openId = new IdentityProvider { DisplayName = identityProviderName, Description = identityProviderName, WebSSOProtocolType = "OpenId", IssuerId = issuer.Id }; svc.AddObject("IdentityProviders", openId);
Atualize o endereço de entrada do provedor de identidade. Neste exercício, você usará www.myopenid.com como o endereço de entrada. Outros provedores de identidade OpenID incluem Google e Yahoo!, que têm seus próprios endereços de logon. Eles são https://www.google.com/accounts/o8/ud e https://open.login.yahooapis.com/openid/op/auth, respectivamente.
var openIdAddress = new IdentityProviderAddress { Address = "https://www.myopenid.com/server", EndpointType = "SignIn" }; svc.AddRelatedObject(openId, "IdentityProviderAddresses", openIdAddress); svc.SaveChanges();
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 = openId.Id, RelyingPartyId = rp.Id }); } } svc.SaveChanges(SaveChangesOptions.Batch);