Israel Aéce

Microsoft MVP, MCP, MCAD, MCTS, MCPD e MCT

My Links

Blog Stats

Archives

Post Categories

Links

Login

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.

posted on Tuesday, October 23, 2007 2:00 AM

Feedback

# re: Credenciais de ASP.NET para ASP 12/19/2007 12:59 AM Dennes

Oi, Israel !

Achei a dica muito legal, mas funciona mesmo ?

Pergunto pelo seguinte : para um desvio de httphandler funcionar no web.config a extensão do arquivo tem que estar configurada para ser processada pelo ASP.NET e não pelo ASP 3 tradicional.

Se você reconfigura a extensão para rodar com ASP.NET, então na verdade você precisa de uma migração da aplicação, pois tudo aquilo do ASP 3 que não for compatível com o ASP.NET vai gerar erro.

Mas se você seguir todos esses passos, por que então usar um handler ? Se seguir todos esses passos na verdade você já migrou a aplicação para ASP.NET e context.user vai estar disponível dentro da página, sem a necessidade do cabeçalho...

Isso só seria diferente no IIS 7, onde o servidor web roda integrado com o .NET.

Onde estou errando neste raciocinio ?

[]'s

Dennes

# re: Credenciais de ASP.NET para ASP 12/19/2007 3:12 PM Israel Aece

Ola Dennes,

Sim, é necessário efetuar o mapping no IIS para que a requisição seja pelo ISAPI do ASP.NET. Esqueci de mencionar isso no post.

Com relação a migração, isso não era possível, porque a página era complexa o bastante para isso e, para poupar tempo, optaram por não migrá-la. Mas concordo contigo que isso seria a melhor opção, para tirar melhores proveitos da plataforma/tecnologia.

Já o processamento do IIS, o DefaultHttpHandler é capaz de devolver a requisição para IIS e tratá-la através do ISAPI daquele respectivo recurso. Neste link http://quickstarts.asp.net/QuickStartv20/aspnet/doc/tipstricks/default.aspx temos mais detalhes sobre esse comportamento.

Att,

Title  
Name  
Url
Box Code
Protected by FormShield
Comments