Como: Utilizar o Serviço de Gestão ACS para configurar um Fornecedor de Identidade OpenID
Atualizado: 19 de junho de 2015
Aplica-se a: Azure
Aplica-se A
Microsoft® Azure™ Controlo de Acesso Service (ACS)
OpenID 2.0
Resumo
Este tópico descreve os passos básicos necessários para a adição de fornecedores de identidade que suportam o protocolo OpenID. Os fornecedores de identidade OpenID podem ser adicionados ao ACS utilizando o Serviço de Gestão. Os fornecedores de identidade OpenID não podem ser adicionados utilizando o Portal de Gestão ACS. Neste tópico referimo-nos à especificação OpenID 2.0 porque esta é a versão de especificação que a ACS suporta.
Conteúdos
Objetivos
Descrição Geral
Resumo dos Passos
Passo 1 – Recolher informações de configuração
Passo 2 - Adicionar referências aos serviços e assembleias exigidos
Passo 3 – Implementar o Serviço de Gestão Cliente
Passo 4 - Adicionar um Fornecedor de Identidade
Objetivos
Identifique os pré-requisitos necessários e informações de configuração.
Listar os passos necessários para adicionar um fornecedor de identidade OpenID.
Descrição Geral
O Serviço de Gestão é um serviço web que é um dos componentes-chave da ACS. O Serviço de Gestão expõe a funcionalidade que está disponível através da interface de utilizador do Portal de Gestão. Tudo o que possa ser realizado no Portal de Gestão também pode ser feito através do Serviço de Gestão. A adição de fornecedores de identidade OpenID ACS permite-lhe economizar no desenvolvimento e manutenção do mecanismo de gestão de identidade da escala de Internet. Para realizar a tarefa de adicionar um fornecedor de identidade OpenID, escreva código que siga passos específicos. Este tópico descreve estes passos básicos.
Resumo dos Passos
Passo 1 – Recolher informações de configuração
Passo 2 - Adicionar referências aos serviços e assembleias exigidos
Passo 3 – Implementar o Serviço de Gestão Cliente
Passo 4 - Adicionar um Fornecedor de Identidade
Passo 1 – Recolher informações de configuração
Este passo identifica e mostra como recolher as informações de configuração necessárias. Tem de recolher as seguintes informações:
Nome de utilizador de identidade do Serviço de Gestão — ManagementClient.
Palavra-passe de identidade do Serviço de Gestão — Para obter a senha de identidade do serviço de gestão:
Inicie sessão no Portal de Gestão de Serviços Controlo de Acesso.
Na secção Administração , clique no link Do Serviço de Gestão .
Na página do Serviço de Gestão , clique no link ManagementClient (ManagementClient é o nome de utilizador real para o serviço).
Na secção Credenciais , clique na Chave Simétrica ou na ligação Palavra-Passe . O valor em cada um é o mesmo. Esta é a senha.
Espaço de nome do seu serviço
ACS nome de anfitrião - Geralmente accesscontrol.windows.net.
Depois de recolher as informações necessárias, siga estas etapas para criar uma aplicação de consola de amostra que irá executar o código para adicionar o fornecedor de identidade OpenID:
Abra Visual Studio ® 2010 e crie um novo projeto de aplicação de consola.
Na classe Programa , atribua as informações recolhidas anteriormente às variáveis de âmbito do módulo, utilizando código semelhante ao seguinte.
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;
Passo 2 - Adicionar referências aos serviços e assembleias exigidos
Este passo identifica e adiciona as dependências necessárias aos serviços e assembleias.
Para adicionar as dependências necessárias aos serviços e assembleias
Adicione uma referência a System.Web.Extensions.
Adicione uma referência de serviço ao Serviço de Gestão. O URL do Serviço de Gestão é exclusivo do seu espaço de nome e parece semelhante ao seguinte:
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;
Note a última declaração, ConsoleApplication1.ServiceReference1. Pode variar no seu caso se tiver alterado os valores predefinidos quando criou a aplicação da consola ou quando adicionou a referência ao serviço de gestão.
Passo 3 – Implementar o Serviço de Gestão Cliente
Este passo cria um método que engloba a implementação do cliente do Serviço de Gestão.
Implementar o cliente do Serviço de Gestão
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; }
Implementar o método GetTokenWithWritePermission e os seus métodos de ajuda. Adicionará o token SWT OAuth ao cabeçalho de autorização do pedido 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 4 - Adicionar um Fornecedor de Identidade
Este passo adiciona um fornecedor de identidade OpenID utilizando o cliente do Serviço de Gestão que criou anteriormente.
Para adicionar um fornecedor de identidade OpenID
Dentro do método Principal , inicialize o cliente do Serviço de Gestão.
ManagementService svc = CreateManagementServiceClient();
Adicione o seu fornecedor de identidade como emitente.
Issuer issuer = new Issuer { Name = identityProviderName }; svc.AddToIssuers(issuer); svc.SaveChanges(SaveChangesOptions.Batch);
Criar um fornecedor de identidade.
var openId = new IdentityProvider { DisplayName = identityProviderName, Description = identityProviderName, WebSSOProtocolType = "OpenId", IssuerId = issuer.Id }; svc.AddObject("IdentityProviders", openId);
Atualize o endereço de inscrição do fornecedor de identidade. Neste exercício utilizará www.myopenid.com como endereço de inscrição. Outros fornecedores de identidade OpenID incluem google e Yahoo!, e eles têm os seus próprios endereços de inscrição. 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();
Disponibilizar o fornecedor de identidade às partes dependentes, com exceção do Serviço de Gestão.
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);