【问题标题】:ASP.NET MVC request context detailsASP.NET MVC 请求上下文详细信息
【发布时间】:2023-03-17 03:46:01
【问题描述】:

我可以在哪里插入自定义提供程序来设置请求上下文?

我想在“从属”模式下运行 ASP.NET MVC 应用程序,同时逐步从旧系统转换功能。每个请求都有一个 cookie,我想获取 cookie,进行外部调用以将其解析为用户身份,并为请求的其余部分设置该用户身份。

我可能会设置表单身份验证 cookie,或使用 Session,但关于身份验证的真实来源必须是外部设置的 cookie,在每个请求上。

最好的方法是什么?我在哪里插入?我查看了身份验证提供程序和 Authorization 属性,但这些似乎都不适合。

【问题讨论】:

  • 可能是您的 ASP.NET MVC 应用程序的 Application_AuthenticateRequest 方法或模块中的 Global.asax。
  • 这似乎为时已晚。来自 MSDN:调用此方法以通过 HttpApplication 进行任何身份验证后处理。我需要实际进行身份验证,并创建用户对象。
  • 您可以在 AuthenticateRequest 方法中执行的操作。您可以将 HttpContext.Current.User 更新为自定义 Principal 对象

标签: asp.net-mvc authentication


【解决方案1】:

我会认为 HttpModule 非常适合这种情况?

如果我理解正确的话,我最近在一个项目上做了类似的事情:

  public class UserSessionHttpModule : IHttpModule
{

    private HttpApplication mApplication;

    public void Dispose()
    {
    }

    public void Init(HttpApplication context)
    {
        mApplication = context;
        context.BeginRequest += new EventHandler(CheckUserSession);
    }

    private void CheckUserSession(Object sender, EventArgs e)
    {
        var extension = Path.GetExtension(mApplication.Context.Request.Path);

        if (extension == "" || extension == ".aspx")
        {
            var userSessionService = ObjectFactory.GetInstance<IUserSessionService>();
            userSessionService.CheckUserSession();
        }

    }
}

【讨论】:

  • 这听起来很有希望。我认为 HttpModule 将无法访问 ASP.NET 上下文。在不知道身份验证是非标准的情况下,我究竟需要设置什么才能继续请求?
  • 我实现了自己的自定义 AuthorizeAttribute,我将其放在操作上,以便使用我自己的用户会话服务对其进行授权。如果有帮助,可以发布代码。
  • 我真的只是想知道表单身份验证设置了什么,这样我就可以使自定义身份验证过程对控制器透明。只是 HttpContext.User,还是需要做更多设置?
  • 这个walk through 可能会有所帮助 - 它描述了添加自定义身份验证,同时仍然允许使用内置安全性
【解决方案2】:

您可以覆盖Global.asax 页面中的Init 方法并监听PostAuthenticateRequest 事件,这些事件在身份验证后触发,因此您可以从表单验证cookie 中更改您喜欢的任何值并注入您自己的

【讨论】:

    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多