Ich habe eine Anwendung, die in asp.net geschrieben ist und ich habe einige klassische ASP-Seiten in die Website integriert. Die Site verwendet die Windows-Authentifizierung. Da ich ASP-Seiten mit Rollen nicht verwalten kann, habe ich ein benutzerdefiniertes HttpModule geschrieben, um zu überprüfen, ob ein Benutzer Berechtigungen zum Anzeigen dieser Seiten hat, andernfalls wird auf eine Seite "Zugriff verweigert" umgeleitet. Das Hauptproblem ist, dass die Anwendung im "klassischen Modus" auf IIS7 ausgeführt werden muss. Mein Modul arbeitet im integrierten Modus, aber nicht im klassischen Modus. Gibt es einen Grund, warum dieser Code nicht auch im klassischen Modus funktionieren sollte? Danke im Voraus. HierBenutzerdefinierte HttpModule arbeiten in IIS7 integriert, aber nicht im klassischen Modus
ist der Code für das Modul, es ist ziemlich einfach:
public class MyModule: IHttpModule
{
public void Init(HttpApplication application)
{
application.PostAuthenticateRequest += new EventHandler(Application_PostAuthenticateRequest);
}
void Application_PostAuthenticateRequest(object source, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
HttpContext context = ((HttpApplication)source).Context;
if (context.Request.RawUrl.Contains("/protected-subfolder/"))
{
// gets user from windows authentication
string currentUser = Convert.ToString(context.User.Identity.Name);
if (!isAdmin(currentUser))
{
//deny access
(context.Response).Redirect(VirtualPathUtility.ToAbsolute("~/AccessDenied.aspx"));
}
}
}
public void Dispose(){ }
Hier ist die Einstellung in web.config für klassischen Modus (nicht funktioniert):
<configuration>
<system.web>
<httpModules>
<add name="MyModule" type="MyModule" />
</httpModules>
</system.web>
</configuration>
Und die Einstellung für integrierter Modus (funktioniert):
<configuration>
<system.webServer>
<modules>
<add name="MyModule" type="MyModule"/>
</modules>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
</configuration>
Aktivieren Sie fehlgeschlagene Anforderungsverfolgung, und Sie erhalten einen besseren Überblick darüber, was passiert. Siehe http://www.iis.net/learn/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis – x0n
Ich habe tatsächlich Failed Request Tracing aktiviert - das Problem ist, dass die Die Anfrage scheitert nicht, aber der Benutzer kann direkt auf die Seite gehen, auf die er/sie nicht zugreifen darf. Dies scheint zu bedeuten, dass das httpmodul überhaupt nicht läuft. – lem
Wenn Sie ein httpModule wie folgt hinzufügen, ist es auch das letzte Modul, das ausgeführt wird. Dies könnte ein Problem sein. Sie können sich die geerbten Module aus der systemweiten web.config und dann in Ihrer Konfiguration ansehen, um sicherzustellen, dass Ihre erste in der Liste ist, und fügen Sie dann die aus dem System web.config hinzugefügten zurück. –
x0n