Desenvolvimento - ASP. NET

ASP.NET 2.0 Forms Authentication Cross Application

O processo de autenticação de usuários em aplicações ASP.NET é simples e eficiente. Você pode utilizar as novas classes Membership, Roles e Profiles combinadas com os novos controles de Login para implementar uma solução completa para gestão dos seus usuários.

por Carlos de Mattos



Tecnologias:

· C#

· ASP.NET 2.0

Introdução

O processo de autenticação de usuários em aplicações ASP.NET é simples e eficiente. Você pode utilizar as novas classes Membership, Roles e Profiles combinadas com os novos controles de Login para implementar uma solução completa para gestão dos seus usuários. Não é raro o desenvolvedor ter duas (ou mais) aplicações Web distintas rodando sob o mesmo domínio. Em algumas situações você pode ter uma aplicação escrita em VB.NET e outra em C# e ambas sendo executadas dentro do mesmo domínio. Em cenários WebFarm onde sua aplicação é distribuída em diferentes servidores para implementar balanceamento de carga, a troca de credenciais entre as aplicações é uma necessidade básica. Este artigo explicará como o desenvolvedor deve modificar o Web.config para permitir que as aplicações compartilhem do mesmo processo de autenticação, ou seja, o usuário autentica-se uma única vez e tem acesso às duas (ou mais) aplicações.

Configuração Padrão

O elemento machineKey armazena os atributos necessários para implementarmos a autenticação CrossApplication. A configuração padrão para o elemento <machineKey> é definida no arquivo web.config.comments, localizado na pasta “c:\windows\Microsoft.NET\Framework\v2.0.50727\config\”. O Quadro 1 apresenta as configurações relevantes apenas como referência.

<machineKey

validationKey = "AutoGenerate,IsolateApps" [String]

decryptionKey = "AutoGenerate,IsolateApps" [String]

decryption = "Auto" [AUTO | DES | 3DES | AES]

validation = "SHA1" [MD5 | SHA1 | 3DES | AES]

/>

Quadro 1: Elemento <machineKey>

Modelo de Autenticação

Forms Authentication utiliza as chaves deste elemento para assinar o Ticket de Autenticação. As Roles Manager e Anonymous, se habilitadas, também utilizam essas chaves para assinar seus cookies. Se sua aplicação utiliza Anonymous Authentication no modo Cookiless, os dados enviados através da URL também são assinados com essas chaves.

Os atributos do elemento machineKey


decryption: Este atributo especifica o algorítmo de criptografia simétrica utilizado para criptografar e decriptografar os tickets de autenticação.

validation: Este atributo determina o algorítimo responsável por gerar os HMACs que garantirão que o ViewState e os Tickets de Autenticação não sejam violados.

Alterando a Configuração Padrão

Para permitir que duas (ou mais) aplicações possam compartilhar os mesmos Tickets de Autenticação, é necessário que os atributos do elemento machineKey tenham os mesmos valores para todas as aplicações envolvidas no processo. Desta forma, é necessário que o desenvolvedor gere manualmente novas chaves randomicas para alimentar esses atributos. É importante esclarecer que o atributo validationKey suporta chaves de 64 bytes (128 caracteres hexadecimais), e o atributo decryptionKey suporta chaves de 32 bytes (64 caracteres hexadecimais). O Quadro 2 apresenta uma classe de exemplo utilizada para gerar novas chaves randomicamente.

using System;

using System.Text;

using System.Security;

using System.Security.Cryptography;

class App

{

static void Main (string[] argv)

{

int len = 64;

if (argv.Length > 0)

len = int.Parse(argv[0]);

byte[] buff = new byte[len / 2];

RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

rng.GetBytes(buff);

StringBuilder sb = new StringBuilder(len);

for (int i = 0; i < buff.Length; i++)

sb.Append(string.Format("{0:X2}", buff[i]));

string k = sb.ToString();

Console.WriteLine(sb);

Console.ReadLine();

}

}

Quadro 2: Aplicação Console para gerar as chaves

Após gerar as novas chaves para os atributos do elemento machineKey, suas aplicações poderão compartilhar os mesmos Tickets de Autenticação mesmo que estejam instaladas em diferentes diretórios virtuais. O Quadro 3 apresenta o fragmento do arquivo Web.config alterado manualmente.

<machineKey validationKey="8AD952A432FC678710394955A1C4E5A76F123F1671E8956D5492C 8776EBC3BA1BC4F5A19176BD3C269C165556D93D6853224AC25BE56B 9301F5501861E535614"

decryptionKey="A0BF0BD093D2ED0B8E69AEE1392DBC2F95 3A4FB108C65808D15CD541960C9031"

validation="SHA1"

decryption="AES"

/>

Quadro 3: O elemento machineKey alterado.

Conclusão


Neste artigo, o leitor acompanhou os passos para alterar o arquivo web.config das suas aplicações para permitir a implementação do modelo de autenticação CrossApplication. Os cenários mais comuns para esta necessidade são os WebFarms e aplicações instaladas em diretórios virtuais diferentes e que necessitam compartilhar a mesma autenticação de usuários.

Carlos de Mattos

Carlos de Mattos - É profissional certificado pela Microsoft desde 1998. Atua como desenvolvedor de soluções customizadas para o mercado corporativo há mais de 10 anos. Foi premiado pela Microsoft como MVP em 2003 e 2004. Tem diversos artigos publicados nas revistas FórumAccess e MSDN Magazine, nos Websites MSDN Online Brasil, Portal DevMedia/MSDN e Linha de Código. Carlos também atuou durante 5 anos junto à Comunidade Acadêmica na região de Sorocaba/SP ministrando palestras e treinamentos junto às Universidades e Colégios Técnicos. Atualmente está em Sorocaba/SP, na WD5 Solutions dedicando-se à implementação de soluções baseadas em tecnologia Microsoft.NET.