【问题标题】:How can I set the Page.User Property in ASP.NET?如何在 ASP.NET 中设置 Page.User 属性?
【发布时间】:2011-06-20 06:45:24
【问题描述】:

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

【问题讨论】:

  • 我认为表单身份验证很容易扩展以满足最奢侈的需求。为什么要使用自定义模块?

标签: asp.net


【解决方案1】:

Page.User 只返回Page.Context.User,它应该通过模块或global.asaxHttpApplication.AuthenticateRequest 的处理程序中设置。您可以提供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;
        }
    }
}

【讨论】:

    【解决方案2】:

    您需要编写自己的身份验证模块 - 请参阅此 excellent article,它解释了如何编写支持基本和摘要身份验证的 ASP.NET 身份验证模块。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多