5

Ich habe eine ASP.NET MVC-Anwendung mit einigen RESTful-Diensten, die ich mit benutzerdefinierter Basisauthentifizierung zu sichern versuche (sie werden für meine eigene Datenbank authentifiziert). Ich habe dies implementiert, indem ich ein HTTPModule geschrieben habe.Benutzerdefinierte Basisauthentifizierung schlägt in IIS7 fehl

I ein Verfahren haben, um dem Ereignis HttpApplication.AuthenticateRequest angebracht, die dieses Verfahren im Fall von Authentifizierungsfehler aufruft:

private static void RejectWith401(HttpApplication app) 
    { 
     app.Response.StatusCode = 401; 
     app.Response.StatusDescription = "Access Denied"; 
     app.CompleteRequest(); 
    } 

Diese Methode zum HttpApplication.EndRequest Ereignis verbunden ist:

public void OnEndRequest(object source, EventArgs eventArgs) 
    { 
     var app = (HttpApplication) source; 
     if (app.Response.StatusCode == 401) 
     { 
      string val = String.Format("Basic Realm=\"{0}\"", "MyCustomBasicAuthentication"); 
      app.Response.AppendHeader("WWW-Authenticate", val); 
     } 
    } 

Dieser Code fügt den Header "WWW-Authenticate" hinzu, der den Browser anweist, den Anmeldedialog zu öffnen. Dies funktioniert perfekt, wenn ich lokal mit dem Web-Server von Visual Studio debugge. Aber es schlägt fehl, wenn ich es in IIS7 ausführe.

Für IIS7 sind die integrierten Authentifizierungsmodule alle außer anonym deaktiviert. Es gibt immer noch eine HTTP 401-Antwort zurück, aber es scheint den WWW-Authenticate-Header zu entfernen.

Irgendwelche Ideen?

Antwort

2

Ich fand es heraus. Das Problem war, dass ich dieses Modul "BasicAuthenticationModule" nannte, das mit einem anderen Modul kollidierte, das IIS eingebaut hatte. Sobald ich das Modul umbenannte, funktionierten Sachen gut!