Asp.net mvc 设置会话的HttpContext.User

Asp.net mvc 设置会话的HttpContext.User,asp.net-mvc,custom-authentication,Asp.net Mvc,Custom Authentication,我已经在ASP.NET MVC中实现了自定义身份验证。如果有效用户尝试登录,我将在AccountController的登录方法中设置HttpContext.user=user。但它仍然存在,只是为了满足这一要求。我如何为会话设置它 我使用了另一种方法,setHttpContext.Session[“CurrentUser”]=user。如果我想查看会话是否被授权,我必须检查HttpContext.User!=空。但是,我不想在应用程序中的任何地方公开身份验证逻辑。如果我需要改变的话,那会很混乱

我已经在ASP.NET MVC中实现了自定义身份验证。如果有效用户尝试登录,我将在AccountController的登录方法中设置
HttpContext.user=user
。但它仍然存在,只是为了满足这一要求。我如何为会话设置它

我使用了另一种方法,set
HttpContext.Session[“CurrentUser”]=user
。如果我想查看会话是否被授权,我必须检查
HttpContext.User!=空
。但是,我不想在应用程序中的任何地方公开身份验证逻辑。如果我需要改变的话,那会很混乱


请帮我解决这个问题。一种解决方案可能是在开始时将每个请求的
HttpContext.User
属性填充为
HttpContext.Session[“CurrentUser”]
,但我不知道如何操作。

最好的方法是编写一个自定义身份验证模块,并将其挂接到应用程序中。此模块将在任何请求之前执行,并有机会根据需要设置HttpContext.User属性

例如,考虑表单验证模块。在HTTP处理程序运行(无论是.aspx页面、MVC管道等)之前,它有机会拦截请求。它读取登录cookie的值,解密并验证加密的cookie值,如果检查通过,则设置HttpContext.User。这样,当处理程序运行并实际处理请求时,用户属性已经正确设置

最后,您不需要ASP.NET上的自定义授权属性,因为框中已提供的[Authorize]属性应自动与自定义身份验证模块一起工作。但是,您的AccountController.LogOn()方法(或您使用的任何替代方法)将需要与相应的身份验证提供程序通信,该身份验证提供程序将生成将由身份验证模块验证的令牌。这应该是您唯一需要编写不同于box中提供的代码的地方


有关更多信息,请参阅和。

在Global.asax的应用程序类中编写以下方法

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   HttpContext.Current.User = HttpContext.Session["CurrentUser"];
}

或者,您可以使用继承到控制器的System.Web.Mvc.Controller的“User”属性(注意:在成功验证用户登录时,请确保调用FormsAuthentication.SetAuthCookie方法)。

.Net Core
中,此属性的等效性是什么?我在.Net Core中也遇到了同样的问题。我尝试了很多天,但没有找到任何真正的解决办法。如果你有什么解决办法,请告诉我。