Как HttpModule для пользовательской аутентификации взаимодействует с аутентификацией Windows? - PullRequest
6 голосов
/ 09 декабря 2010

Я пытаюсь создать собственный HttpModule, который контролирует, какие пользователи могут просматривать сайт.

Я пытаюсь использовать для этого проверку подлинности Windows.

На отдельной странице я бы, вероятно, сделал что-то вроде этого:

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

Но поскольку я хочу сделать это более настраиваемым на уровне приложений, я бы хотел использовать HttpModule.

Вот начало, которое я сделал для кода:

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

Я бы согласился с использованием имеющегося у меня кода, если бы я мог поместить его в функцию OnBeginRequest (). Но свойство User не создается в объекте HttpContext, пока не будет запущено OnEndRequest ().

Запуск кода ранее помешал бы приложению выполнить дополнительную работу по созданию этого вывода, поскольку некоторые пользователи просто будут заблокированы от доступа в конце.

Может кто-нибудь предложить решение этой проблемы - это происходит потому, что мой модуль работает до модуля проверки подлинности Windows или как?

... или, может быть, есть более простой способ сделать то, что я пытаюсь сделать с разрешениями IIS или файловой системы?

Ответы [ 3 ]

10 голосов
/ 09 декабря 2010

Требуется событие AuthenticateRequest.

Событие AuthenticateRequest

0 голосов
/ 09 декабря 2010

Зачем писать модуль http для этого. Если это веб-формы asp.net, то почему бы просто не использовать встроенные средства, такие как LoginView http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.loginview.aspx

0 голосов
/ 09 декабря 2010

Вы пытались реализовать метод в global.aspx? OnSessionStart? Кроме того, я бы использовал hasRole или какое-то другое групповое свойство вместо содержит и имя пользователя.

...