5

J'ai une application ASP.NET MVC, avec certains services RESTful que j'essaie de sécuriser en utilisant l'authentification de base personnalisée (ils sont authentifiés par rapport à ma propre base de données). J'ai implémenté ceci en écrivant un HTTPModule.L'authentification de base personnalisée échoue dans IIS7

J'ai une méthode associée à l'événement HttpApplication.AuthenticateRequest, qui appelle cette méthode dans le cas d'échec d'authentification:

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

Cette méthode est jointe à l'événement HttpApplication.EndRequest:

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); 
     } 
    } 

Ce code ajoute l'en-tête "WWW-Authenticate" qui indique au navigateur de lancer la boîte de dialogue de connexion. Cela fonctionne parfaitement lorsque je débogue localement en utilisant le serveur Web de Visual Studio. Mais il échoue quand je l'exécute dans IIS7.

Pour IIS7, les modules d'authentification intégrés sont tous désactivés, sauf les modules anonymes. Il renvoie toujours une réponse HTTP 401, mais il semble supprimer l'en-tête WWW-Authenticate.

Des idées?

Répondre

2

Je l'ai compris. Le problème était que j'ai appelé ce module, "BasicAuthenticationModule" qui était en conflit avec un autre module IIS avait intégré. Une fois que j'ai renommé le module les choses ont bien fonctionné!

Questions connexes