如何在ASP.NET中设置Page.User属性?

时间:2011-06-20 06:45:24

标签: asp.net

这主要是一个理论问题,例如,如果我想创建自己的表单身份验证替代方案。

3 个答案:

答案 0 :(得分:2)

Page.User只返回Page.Context.User,应通过模块或HttpApplication.AuthenticateRequest设置global.asax的处理程序。您可以提供IPrincipal的自定义实现,然后可以返回IIdentity的自定义实现。

例如:

public class App : HttpApplication
{
    public App()
    {
        AuthenticateRequest += App_AuthenticateRequest;
    }

    void App_AuthenticateRequest(object sender, EventArgs e)
    {
        var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];

        if (cookie == null) return;

        var userData = GetUserData(cookie.Value);
        var userIdentity = new MyIdentity(userData);

        Context.User = new MyPrincipal(userIdentity);
    }

    private string GetUserData(string value)
    {
        try
        {
            var ticket = FormsAuthentication.Decrypt(value);
            return ticket == null ? null : ticket.UserData;
        }
        catch (ArgumentException)
        {
            Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
            return null;
        }
    }
}

答案 1 :(得分:1)

您需要编写自己的身份验证模块 - 请参阅此excellent article,其中介绍了如何编写支持basic& amp;的ASP.NET身份验证模块。摘要认证。

如果您只考虑表单身份验证方案,那么您实际上不必编写一个。内置的Forms Authenticate模块具有很强的可扩展性(并提供了很大的灵活性)。

答案 2 :(得分:0)

经过一些谷歌搜索后,我找到了this blogpost。它很好地描述了如何做到这一点。基本上,您需要创建自定义HTTP模块并处理OnAuthenticateRequest对象的HttpApplication事件。