我正在使用ASP.NET MVC5实现Web应用程序。我没有使用常规的MVC身份验证和授权。我选择使用Sessions
代替,因为我的应用程序将由很少的用户使用,并且仅在本地使用。
我已经在gloab.asax的Session["LoggedUser"]
中设置了Application_Start()
。登录时设置Session["LoggedUser"]
的值。然后,我在多个操作中使用Session["LoggedUser"]
条件检查了if
的值,例如Edit和Delete等。如果它等于空字符串,则该用户无权使用该操作/页面,反之亦然。此类页面将无法直接访问。
现在,在常规的MVC授权和身份验证中,使用[AllowAnonymous]
,[Authorize]
和[Authorize(Roles="Admin")]
非常干净。这些标签可以放在控制器中的任何动作上,授权将在下面处理。我试图找到与这些标记等效的标记,以用于基于会话的身份验证和授权。也许,这是在MVC应用程序中使用会话的一种高效/更好的方式。请引导我。
提前感谢。
您可以创建一个自定义过滤器来执行您的逻辑。read here。
添加一个自定义属性,以使用访问限制/允许标记您的操作/控制器。(从安全的角度来看,最好标记为允许而不是限制,以后再添加操作以证明将来的安全性)
并在过滤器中检查Action / Controller的属性。
这里是使用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");
}
}