Credenciais de ASP.NET para ASP


Recentemente estive envolvido em um problema que muita gente acredito já ter passado. Trata-se de enviar dados de uma página ASP.NET para uma página ASP que encontra-se dentro da mesma aplicação (mesmo diretório virtual). Para ser mais preciso, precisava enviar dados as credenciais de acesso (login) para a página ASP.

Para enviar os parametros, poderia ser via querystrings ou cookies, mas lembrando que é preciso aplicar algum algoritmo de criptografia para garantir que nenhum espião consiga interceptar o processo e, consequentemente, visualizar o que está ali dentro. Para tornar as coisas um pouco mais complicadas, a solução mais interessante é mandar esses dados via headers, para ficar “mais seguro”. Como tudo está no mesmo servidor/aplicação, a solução para isso é criar um handler, herdando de DefaultHttpHandler que, por sua vez, fornece uma propriedade chamada ExecuteUrlHeaders que permite adicionar valores nos headers. O código abaixo ilustra essa classe:

public class TransferHandler : DefaultHttpHandler
{
    public TransferHandler() { }

    public override string OverrideExecuteUrlPath()
    {
        base.ExecuteUrlHeaders.Add(“AppUserName”,
            base.Context.User.Identity.Name);
        return null;
    }
}

O arquivo Web.Config fica:

<httpHandlers>
  <add path=”*.asp” type=”TransferHandler” verb=”GET,HEAD,POST” validate=”true”/>
</httpHandlers>

Com isso, todas as requisições para as página *.asp serão interceptadas por esse handler que fará o trabalho de capturar a informação de login, e enviá-la para a página *.asp. Com isso, nas páginas *.asp podemos fazer:

Response.Write Request.ServerVariables(“HTTP_APPUSERNAME”)

Lembre-se que o ideal é aplicar um algoritmo de criptografia/hash para “salgar” as coisas. O hash, ao meu ver, seria mais interessante, já que voce define uma chave privada (que somente voce conhece) e a utiliza para efetuar o hash do valor. Isole essa classe em um componente e exponha-o via COM, para que voce consiga acessá-lo na aplicação ASP. Neste caso, voce poderá enviar, via headers, o valor puro e também um novo item que é o resultado hash desse valor. Quando chegar na página de destino, voce pega ambos os dados, e valida através do mesmo componente (e mesmo algoritmo), para verificar se o valor não foi alterado durante a sua viagem.

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s