2010-12-09 21 views
6

J'essaie de créer un HttpModule personnalisé qui contrôle quels utilisateurs peuvent voir un site. J'essaie de tirer parti de l'authentification Windows pour ce faire.Comment un HttpModule pour l'authentification personnalisée interagirait-il avec l'authentification Windows?

Sur une page individuelle, je ferais probablement quelque chose comme ceci:

if (HttpContext.Current.User.Identity.Name.Contains("jsmith")) 
{ 
    Response.Write("You do not have the correct permissions to view this site."); 
    Response.End(); 
} 

Mais parce que je veux le rendre plus configurable au niveau de l'application, je voudrais utiliser un HttpModule.

Voici le début que j'ai fait sur le code:

using System; 
using System.Web; 

public class CustomAuthHttpModule : IHttpModule 
{ 
    public void Dispose() { } 

    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += new EventHandler(OnBeginRequest); 
     context.EndRequest += new EventHandler(OnEndRequest); 
    } 

    void OnBeginRequest(object sender, EventArgs e) { } 

    void OnEndRequest(object sender, EventArgs e) 
    { 
     HttpApplication appObject = (HttpApplication)sender; 
     HttpContext contextObject = appObject.Context; 

     if (contextObject.User.Identity.Name.Contains("jsmith")) 
     { 
      contextObject.Response.Clear(); 
      contextObject.Response.End(); 
     } 
    } 
} 

je serais bien avec l'aide du code je, si je pouvais mettre dans la fonction OnBeginRequest(). Mais la propriété User n'est pas créée dans l'objet HttpContext jusqu'à exécution de OnEndRequest(). Exécuter le code plus tôt empêcherait l'application de faire le travail supplémentaire de production de cette sortie, puisque certains utilisateurs vont juste être bloqués à l'accès à la fin.

Quelqu'un peut-il suggérer une solution à cela - est-ce parce que mon module est en cours d'exécution avant le module Windows Auth, ou quoi?

... ou peut-être existe-t-il un moyen plus simple de faire ce que j'essaie de faire avec IIS ou les permissions du système de fichiers?

+2

Y at-il une raison vous ne venez de laisser IIS faire pour vous? Ou utilisez les fonctions '' dans votre web.config? – CodingGorilla

+0

Pouvez-vous expliquer ce que vous voulez dire? Je vais rechercher les fonctionnalités pour voir de quoi vous parlez. Comment IIS "ferait-il cela pour moi"? – vwfreak

+0

''! Impressionnant. Je marquerais ceci comme la réponse si c'était un et pas un commentaire. Merci! – vwfreak

Répondre

0

Avez-vous essayé d'implémenter la méthode dans global.aspx? OnSessionStart? En outre je voudrais utiliser hasRole ou un autre groupe-Propriété au lieu de contient et nom d'utilisateur. Pourquoi écrire un module http pour cela?

+0

Je comprends que vous pouvez utiliser le fichier global.asax. Peut-être que c'est une meilleure solution, mais j'essayais de comprendre comment fonctionnent les HttpModules. Quand utiliseriez-vous un HttpModule? – vwfreak

+0

Je comprends ce que vous dites sur le nom d'utilisateur. Ça a du sens. – vwfreak

+0

Pas pour la connexion, mais peut-être pour les droits d'accès. Sur ce point, je vous ai mal compris. Ou pour la journalisation. HttpModules sont plus comme des filtres. – Christian