如何在ASP.NET MVC应用程序中正确使用会话?

问题描述 投票:0回答:2

我正在使用ASP.NET MVC5实现Web应用程序。我没有使用常规的MVC身份验证和授权。我选择使用Sessions代替,因为我的应用程序将由很少的用户使用,并且仅在本地使用。

我已经在gloab.asax的Session["LoggedUser"]中设置了Application_Start()。登录时设置Session["LoggedUser"]的值。然后,我在多个操作中使用Session["LoggedUser"]条件检查了if的值,例如EditDelete等。如果它等于空字符串,则该用户无权使用该操作/页面,反之亦然。此类页面将无法直接访问。

现在,在常规的MVC授权和身份验证中,使用[AllowAnonymous][Authorize][Authorize(Roles="Admin")]非常干净。这些标签可以放在控制器中的任何动作上,授权将在下面处理。我试图找到与这些标记等效的标记,以用于基于会话的身份验证和授权。也许,这是在MVC应用程序中使用会话的一种高效/更好的方式。请引导我。

提前感谢。

asp.net asp.net-mvc authentication session authorization
2个回答
0
投票

您可以创建一个自定义过滤器来执行您的逻辑。read here

添加一个自定义属性,以使用访问限制/允许标记您的操作/控制器。(从安全的角度来看,最好标记为允许而不是限制,以后再添加操作以证明将来的安全性)

并在过滤器中检查Action / Controller的属性。


0
投票

这里是使用Authrization属性的方法

public class SessionAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext.Session["LoggedUser"] == null)
            return false;
        else
       {
           var rd = httpContext.Request.RequestContext.RouteData;
           string currentAction = rd.GetRequiredString("action");
           string currentController = rd.GetRequiredString("controller");
           string currentArea = rd.Values["area"] as string;
           ...
           //Your business logic returns true or false based on user
        }
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectResult("~/Account/Login");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.