Exportar (0) Imprimir
Expandir Tudo
Este tópico ainda não foi avaliado como - Avalie este tópico

Autenticação federada para Windows Azure Service Bus

Autores: Jaime Alva Bravo, Mike Wasson

Este artigo mostra como usar a autenticação atual do ADFS (Serviços de Federação do Active Directory) com o Windows Azure Service Bus.

O Windows Azure Service Bus permite que os sistemas locais se comuniquem com aplicativos executados no Windows Azure ou com sistemas em outras redes.

Barramento de Serviço comunica-se com sistemas locais

Figura 1 Usando o Service Bus para se comunicar com sistemas locais.

Quando o Service Bus é usado, a autenticação é um recurso essencial a ser considerado. Para impedir que usuários não autorizados enviem ou recebam mensagens, você deve proteger seu namespace do Service Bus usando o Windows Azure Active Directory Control (ACS). Uma opção é criar um segredo compartilhado, que é basicamente um nome e uma senha. Entretanto, essa opção requer que você gerencie um conjunto separado de senhas, revogue-as, se necessário, e assim por diante.

Seus sistemas locais já usam a autenticação. Em um ambiente Windows, você provavelmente usa o Active Directory. Em vez de distribuir novos métodos de autenticação para a nuvem, você pode aproveitar sua autenticação existente. Os usuários fazem logon com suas credenciais normais de domínio, e o ADFS autentica o usuário no ACS (Figura 2). Agora você pode gerenciar credenciais de usuários em um único local. Você também pode usar grupos de segurança de domínio para controlar permissões do Service Bus.

Autenticação do Service Bus com ADFS

Figura 2 Autenticando o Service Bus com o ADFS.

Pré-requisitos

Este artigo pressupõe que você esteja familiarizado com mensagens orientadas no Windows Azure Service Bus. Para obter mais informações, consulte Filas, tópicos e assinaturas. O exemplo de código no artigo usa filas do Service Bus, mas os mesmos princípios se aplicam a tópicos e assinaturas.

Terminologia

A terminologia usada no ACS e no ADFS pode gerar alguma confusão. Aqui estão os principais termos a serem compreendidos:

  • Declaração: uma afirmação sobre um assunto. Por exemplo, “O usuário A pertence ao grupo de segurança B”. As declarações podem ser usadas para conceder permissões. Por exemplo, você poderia permitir que usuários do grupo de segurança B criassem novas filas do Service Bus, ao passo que os usuários do grupo de segurança C teriam apenas as permissões Enviar e Receber.

  • Provedor de identidade: um serviço que autentica a identidade de um usuário. Neste artigo, o ADFS é o provedor de identidade.

  • Terceira parte confiável: o aplicativo que consome declarações do ADFS. Neste artigo, o Service Bus é a terceira parte confiável.

  • Confiabilidade de terceira parte confiável: um objeto do ADFS que mantém a relação com a terceira parte confiável.

  • Grupo de regras: regras que definem quais declarações são passadas do provedor de identidade (ADFS) para o aplicativo de terceira parte confiável (Service Bus). Um grupo de regras também define mapeamentos, de modo que as declarações do provedor de identidade são traduzidas em declarações que sejam úteis ao aplicativo de terceira parte confiável.

  • Token SAML: o formato de dados que o ADFS usa para apresentar as declarações à terceira parte confiável.

Criar um namespace do Service Bus

Primeiro, use o Portal de Gerenciamento da Plataforma Windows Azure para criar um namespace do Service Bus. Siga as etapas listadas em Como criar ou modificar um namespace do Service Bus Service.

Quando o namespace do Service Bus for ativado, clique em Chave de Acesso e, depois, em Abrir Portal de Gerenciamento do ACS. O nome de seu namespace do Service Bus aparece na parte superior do portal no campo Namespace de Serviço com um sufixo "-sb”. Por exemplo, se seu namespace do Service Bus for “Contoso”, ele será exibido como “Namespace de Serviço: Contoso-sb”.

Em seguida, obtenha o URI para obter metadados de Web Services Federation, como a seguir:

  1. Clique em Integração de Aplicativo.

  2. Na tabela Referência de Ponto de Extremidade, procure “Metadados de Web Services Federation”. Copie esse URI.

Por exemplo, se o namespace do Service Bus for “contoso”, o URI será https://contoso-sb.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml.

Exibir metadados de Web Services Federation

Adicionar uma confiabilidade de terceira parte confiável ao ADFS

Em seguida, adicione uma confiabilidade de terceira parte confiável ao ADFS.

  1. Para abrir o Console de Gerenciamento do ADFS 2.0, clique em Iniciar, aponte para Ferramentas Administrativas e clique em Gerenciamento do ADFS 2.0.

  2. Na pasta AD FS 2.0\Relações de Confiança, clique com o botão direito do mouse em Confiabilidades de Terceira Parte Confiável e clique em Adicionar Confiabilidade de Terceira Parte Confiável.

  3. Na página de Boas-vindas, clique em Iniciar.

  4. Na página Selecionar Fonte de Dados, clique em Importar Dados. Cole no URI de metadados de Web Services Federation que você obteve no Portal de Gerenciamento do Windows Azure. (Consulte a seção anterior.)

    Adicionar o Assistente de Confiabilidade de Terceira Parte Confiável
  5. Na página Especificar Nome para Exibição, escolha um nome para exibição.

  6. Na página Escolher Regras de Autorização de Emissão, selecione “Permitir que todos os usuários acessem esta terceira parte confiável”.

  7. Clique em Avançar para concluir o assistente.

  8. Na caixa de diálogo Editar Regras de Declaração, clique em OK.

Habilitar o provedor de identidade ADFS no Windows Azure ACS

No Portal de Gerenciamento do Windows Azure, adicione o provedor de identidade ADFS.

  1. No Portal de Gerenciamento, clique em Service Bus.

  2. Selecione seu namespace do Service Bus.

  3. Clique em Chave de Acesso.

  4. Clique em Abrir Portal de Gerenciamento do ACS.

  5. Em Relações de Confiança, clique em Provedores de Identidade.

  6. Clique em Adicionar.

  7. Selecione Provedor de identidade Web Services Federation.

  8. Clique em Avançar.

  9. Em Nome para exibição, digite um nome para exibição, como “Contoso ADFS”.

  10. Em Metadados de Web Services Federation, escolha uma das seguintes opções:

    • Insira o URL para o ponto de extremidade Metadados de Federação: https://hostname/FederationMetadata/2007-06/FederationMetadata.xml.

    • Abra o URI do ponto de extremidade Metadados de Federação em uma janela do navegador local, salve o arquivo XML e carregue esse arquivo no Portal de Gerenciamento do Windows Azure.

  11. Em Texto do link de logon, insira um nome para o link de logon

  12. Em Usado por, selecione Service Bus como o aplicativo da terceira parte confiável.

noteObservação
No Console de Gerenciamento do ADFS 2.0, você pode obter o URI dos metadados de federação da seguinte maneira:

  1. Na pasta AD FS 2.0\Serviço, clique em Pontos de Extremidade.

  2. O URI é listado em Metadados. Procure o URI com Tipo igual a “Metadados de Federação”.

Obtendo o URI de metadados da federação

Adicionar grupo de regras

No Portal de Gerenciamento do Windows Azure, adicione um grupo de regras para conceder permissões ao barramento de serviço. Para manter o exemplo simples, permitiremos que qualquer usuário do domínio ADFS tenha direitos de leitura, gravação e gerenciamento.

  1. No Portal de Gerenciamento, clique em Service Bus.

  2. Selecione seu namespace do Service Bus, clique em Chave de Acesso e, depois, em Abrir Portal de Gerenciamento do ACS.

  3. Clique em Grupos de regras.

  4. Clique em Adicionar.

  5. Digite um nome, como “Grupo de regras ADFS Contoso”.

  6. Clique em Salvar.

Em seguida, adicione regras ao grupo de regras.

  1. Na página Editar Grupo de Regras, clique em Adicionar.

  2. Defina os valores a seguir.

    • Tipo de declaração de saída: na caixa Inserir tipo, insira “net.windows.servicebus.action”.

    • Valor de declaração de saída: na caixa Inserir valor, insira “Gerenciar”.

    • Descrição: insira uma descrição, como “Gerenciar o Service Bus”.

  3. Clique em Salvar.

  4. Repita as etapas de 1 a 3 para adicionar mais duas regras:

    • Tipo de declaração = “net.windows.servicebus.action”, valor de declaração = “Escutar”

    • Tipo de declaração = “net.windows.servicebus.action”, Valor de declaração = “Enviar”

  5. Para associar o grupo de regras ao seu aplicativo, clique em Aplicativos de Terceira Parte Confiável.

  6. Clique em Service Bus.

  7. Em Configurações de Autenticação, verifique se o provedor de identidade ADFS está selecionado.

  8. Em Grupos de Regras, selecione o grupo de regras que você criou.

    Configurações da autenticação do Barramento de Serviço

Obter um token SAML

Para autenticação no ACS, o aplicativo cliente deve obter um token de declarações do ADFS.

O código a seguir mostra como obter o token, usando o Kerberos para autenticação.

using Microsoft.IdentityModel.Protocols.WSTrust;
using Microsoft.IdentityModel.Protocols.WSTrust.Bindings;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Messaging;
using System;
using System.IdentityModel.Tokens;
using System.Net;
using System.ServiceModel;
using System.ServiceModel.Security;

class Program
{
    public static string GetSamlClaim(Uri tokenRequestUri, Uri kerberosEndpoint)
    {
        using (var trustChannelFactory = new WSTrustChannelFactory(
                new KerberosWSTrustBinding(SecurityMode.TransportWithMessageCredential),
                new EndpointAddress(kerberosEndpoint)))
        {
            trustChannelFactory.TrustVersion = TrustVersion.WSTrust13;
            trustChannelFactory.Credentials.Windows.ClientCredential = 
                CredentialCache.DefaultNetworkCredentials;

            RequestSecurityToken rst = new RequestSecurityToken(
                WSTrust13Constants.RequestTypes.Issue, WSTrust13Constants.KeyTypes.Bearer)
                {
                    AppliesTo = new EndpointAddress(tokenRequestUri),
                    TokenType =  
                        Microsoft.IdentityModel.Tokens.SecurityTokenTypes.Saml11TokenProfile11
                };

            WSTrustChannel channel = (WSTrustChannel)trustChannelFactory.CreateChannel();
            GenericXmlSecurityToken token = channel.Issue(rst) as GenericXmlSecurityToken;
            return token.TokenXml.OuterXml;
        };
    }

    static void Main(string[] args)
    {
        Uri tokenUri = new Uri("https://contoso-sb.accesscontrol.windows.net/");
        Uri kerberosEndpoint = 
            new Uri("https://yourhostname/adfs/services/trust/13/kerberosmixed");

        string token = GetSamlClaim(tokenUri, kerberosEndpoint);
    }
}

O método GetSamlClaim mostrado nesse exemplo tem dois parâmetros de entrada:

  • O ponto de extremidade de gerenciamento para seu namespace do Service Bus. Por exemplo, se o namespace for “contoso”, o ponto de extremidade de gerenciamento será https://contoso-sb.accesscontrol.windows.net. Você pode localizar o URI do ponto de extremidade no Portal de Gerenciamento. Acesse o portal do Service Bus, selecione seu namespace do Service Bus e veja as propriedades de namespace.

  • O ponto de extremidade ADFS Kerberos, que é https://hostname/adfs/services/trust/13/kerberosmixed

Autenticar o Service Bus

Uma vez que você tenha o token SAML, poderá usá-lo para acessar seu namespace do Service Bus. O código a seguir mostra um exemplo simples de envio e recebimento de uma mensagem em uma fila do Service Bus.

static void QueueMessage(string token, string serviceNamespace)
{
    string queueName = "myQueue";

    TokenProvider credentials = TokenProvider.CreateSamlTokenProvider(token);
    Uri uri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "");
    NamespaceManager manager = new NamespaceManager(uri, credentials);

    QueueDescription myQueue;
    if (manager.QueueExists(queueName))
    {
        myQueue = manager.GetQueue(queueName);
    }
    else
    {
        myQueue = manager.CreateQueue(queueName);
    }

    var factory = MessagingFactory.Create(uri, credentials);
    var queueClient = factory.CreateQueueClient(queueName);

    // Send a message.
    var message = new BrokeredMessage();
    message.Properties.Add("greeting", "hello!");
    queueClient.Send(message);

    // Receive a message
    message = queueClient.Receive(TimeSpan.FromSeconds(5));
    if (message != null)
    {
        Console.WriteLine(message.Properties["greeting"]);
        message.Complete();
    }

    queueClient.Close();
    factory.Close();
}

O método TokenProvider.CreateSamlTokenProvider cria um objeto SamlTokenProvider, que gerencia o token SAML.

Autenticando por grupo de segurança

O Service Bus define três declarações que concedem permissões diferentes:

  • Gerenciar: permite criar e excluir filas e tópicos do Service Bus.

  • Enviar: permite enviar mensagens.

  • Receber: permite receber mensagens.

Para obter detalhes, consulte Autenticação e autorização do Service Bus com o Serviço de Controle de Acesso.

Nas seções anteriores, concedemos todos os três tipos de permissão a cada usuário. Porém, você talvez queira restringir o acesso a determinados usuários. Por exemplo, alguns usuários podem criar ou excluir filas, portanto esses usuários precisam de permissões Gerenciar. Outros usuários podem precisar Escutar e Enviar, mas não Gerenciar.

Suponha que você tenha criado um grupo de segurança do Active Directory denominado “SBAdmins”. Vamos ver como você pode restringir as permissões Gerenciar a membros desse grupo.

Primeiro, adicione uma regra de declaração no ADFS. Essa regra conduzirá o grupo de segurança do usuário ao ACS.

  1. No Console de Gerenciamento do ADFS, selecione a pasta Relações de Confiança/Confiabilidades de Terceira Parte Confiável.

  2. Clique com o botão direito do mouse na confiabilidade de terceira parte confiável.

  3. Clique em Editar Regras de Declaração.

    Editar regras de declaração
  4. Clique em Adicionar Regra.

  5. Na lista suspensa Modelo de regra de declaração, selecione “Enviar Associação em Grupo como uma Declaração”.

  6. Clique em Avançar.

  7. No assistente Adicionar Regra de Declaração de Transformação, clique em Procurar e selecione o grupo de segurança SBAdmins.

  8. Em Tipo de declaração de saída, selecione Grupo.

  9. Na caixa de edição Valor de declaração de saída, insira o valor “SBAdmins”.

    Adicionar Assistente de Regras de Declaração de Transformação

Em seguida, atualize o grupo de regras do ADFS no portal do Windows Azure.

  1. Vá para Grupos de Regras e clique no grupo de regras do ADFS existente.

  2. Em Regras, clique na regra que concede permissões Gerenciar.

  3. Em Tipo de Declaração de Entrada, selecione o tipo de declaração denominado “http://schemas.xmlsoap.org/claims/Group” na lista suspensa.

  4. Em Valor de Declaração de Entrada, insira o valor “SBAdmins”.

  5. Clique em Salvar.

Agora os membros do grupo de segurança SBAdmins têm permissão para criar ou excluir filas do Service Bus. Outros usuários podem enviar ou escutar, mas não podem criar ou excluir filas.


Data da compilação:

2013-10-23
Isso foi útil para você?
(1500 caracteres restantes)
Agradecemos os seus comentários

Contribuições da comunidade

A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2014 Microsoft. Todos os direitos reservados.