Così, ho applicazioni web con web.configs in questo modo:Determina se la pagina corrente richiede l'autorizzazione?
<authorization>
<deny users="?"/>
</authorization>
...
<location path="SomeUnsecuredPage.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
In altre parole, la maggior parte delle pagine richiedono l'autenticazione e l'autorizzazione, ma alcuni non lo fanno.
Quindi ho un IHttpModule che verrà utilizzato da tutte le diverse applicazioni. Tutto quello che voglio fare è controllare se la richiesta corrente è "protetta". Se la pagina non richiede l'autorizzazione, non voglio che il mio IHttpModule faccia qualcosa. Sto usando FormsAuthentication e presumo che FormsAuthentication abbia già tutte queste informazioni in cache da qualche parte, vero? Inoltre, poiché questo controllo verrà eseguito costantemente, deve essere molto veloce.
Attualmente sottoscrivo la HttpApplication.AuthorizeRequest, ma sorprendentemente questo evento si attiva anche per le risorse che consentono l'accesso anonimo.
Qualche idea? Grazie per aver letto!
+1 per creare un'istanza IPrincipal singleton. Pezzo di codice molto utile. Tuttavia, non ha bisogno di creare un'istanza di 'UrlAuthorizationModule'. È sufficiente utilizzare il metodo statico 'CheckUrlAccessForPrincipal'. –