Nas versões anteriores do ASP.NET quando precisamos efetuar um processamento assíncrono através da Interface IHttpAsyncHandler, o método a ser disparado iria correr sob as credenciais do worker process, o que poderia causar problemas de segurança, já que o contexto de segurança da aplicação não era propagado para o processamento assíncrono.
O ASP.NET 2.0 resolve isso com as PageAsyncTasks onde, automaticamente, o contexto é propagado sem que o desenvolvedor precise se preocupar em escrever código para gerenciar isso.
Navegando pelo diretório do .NET Framework 2.0 em %windir%Microsoft.NETFrameworkv2.0 eu vi um arquivo que não conhecia: Aspnet.config. Este arquivo possui um elemento chamado runtime e, dentro dele, dois sub-elementos, a saber: legacyImpersonationPolicy e alwaysFlowImpersonationPolicy.
<?xml version=”1.0″ encoding=”UTF-8″ ?>
<configuration>
<runtime>
……
<legacyImpersonationPolicy enabled=”true”/>
<alwaysFlowImpersonationPolicy enabled=”false”/>
</runtime>
</configuration>
Para que o comportamento seja semelhante as versões anteriores, o elemento legacyImpersonationPolicy é definido como false e, sendo assim, o contexto não será propagado. Caso você não precise manter compartibilidade com aplicações em outras versões, você pode inverter os valores do atributo enabled de ambos elementos e, consequentemente, todo o contexto de segurança será propagado entre as chamadas assíncronas da aplicação, inclusive se utilizando a Interface IHttpAsyncHandler.