0

我正在使用以下代码进行用户身份验证

    Home Controller:
    ------------------
    [AllowAnonymous]
    [HttpPost]
    public JsonResult JsonLogin(SecurityDTO usr)
    {
        var cnt = _ipres.CheckLoginCount(usr);

        if (cnt == 1)
        {
            var logDet = _ipres.GetUser(usr);
            if (logDet != null)
            {
                var dto = new SecurityDTO
                {
                    Id = logDet.Id,
                    UserName = logDet.username,
                    Password = logDet.password,
                    Email = logDet.Emailid,
                    UTID = logDet.UTID,
                };
                Session[USER] = dto;
            }
            if (logDet != null)
            {
                switch (logDet.UTID)
                {
                    case 1:
                        Session["UType"] = "admin";
                        return Json(new { success = true, redirect = Url.Action("Index", "Admin", new { area = "Admin" }) });
                    case 2:
                        Session["UType"] = "user";
                        return Json(new { success = true, redirect = Url.Action("Index", "User", new { area = "User" }) });
                    case 3:
                        Session["UType"] = "client";
                        return Json(new { success = true, redirect = Url.Action("Index", "Client", new { area = "Client" }) });
                    default:
                        Session["UType"] = null;
                        break;
                }
            }
        }
        else
        {
            ModelState.AddModelError("", "Invalid Username or Password");
        }
        return Json(new { errors = GetErrorsFromModelState() });
    }

    Base Controller:
    ------------------
    public SecurityDTO UDTO { get; set; }

    protected override void OnActionExecuting(ActionExecutingContext act)
    {
        if (Session["UType"] != null)
        {
            UDTO = (SecurityDTO)Session[HomeController.USER];
            base.OnActionExecuting(act);
        }
        else
            act.Result = RedirectToAction("Index", "Home", new { area = "" });
    }

这对于身份验证非常有效。成功登录后,我根据用户类型将用户重定向到一个区域。区域内的所有控制器都实现基本控制器。最近我发现这无效,因为以下原因。当我以用户身份登录时,我的 url 将是 ~/AppName/User/User/ViewName。但是,当我对 url 进行一些篡改并将其更改为 ~/AppName/Admin/Admin/ViewName 时,即使我不是管理员用户,它也会将我带到该页面。我仍然以用户身份登录,但我可以访问所有管理功能。基本上,当我在 url 中更改用户类型时,它会将我视为该用户类型。但是预期的行为是在像这样发生 url 篡改时将用户重定向到登录页面。我可以做一些事情,比如识别基本控制器中的用户类型更改并将用户重定向到登录页面吗?请展示正确的方法来做到这一点......

4

1 回答 1

0

您可以添加页面级别身份验证,以检查用户是否有权访问其他页面重定向他,还可以查看https://stackoverflow.com/a/5184363/87956

于 2013-06-12T06:33:34.810 回答