如何重定向到returnUrl在Asp.Net MVC5中工作

  发布于 2023-02-09 21:00

我已经开始使用新的Asp.Net Identity with Owin创建了一个新的MVC 5站点.在我的"帐户"控制器中,它具有[授权]属性,我有相当标准的操作;

   // GET: /User/Login
        [AllowAnonymous]
        public ActionResult Login(string returnUrl)
        {
            ViewBag.ReturnUrl = returnUrl;
            return View();
        } 

// POST: /User/Login
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task Login(LoginViewModel model, string returnUrl)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var userApi = new UserService();
                    var apiUser = await userApi.LogIn(UserManager, model.CardNumber, model.Pin, model.RememberMe);

                    if (apiUser != null)
                    {
                        await SignInAsync(apiUser, model.RememberMe);
                        if (string.IsNullOrEmpty(returnUrl))
                        {                                   
                            return RedirectToAction("UserLoggedIn", "User");    
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("", "Invalid username or password.");
                    }
                }

            }
            catch (Exception ex)
            {
                Trace.TraceError("Cannot login {0}", ex.ToString());
                Response.AppendToLog(ex.ToString());
                ModelState.AddModelError("", ex.ToString());
            }
            // If we got this far, something failed, redisplay form
            return View(model);
        }

我的问题是关于returnUrl行为,上面的代码工作的意义是,如果用户没有登录并在具有属性[Authorize]的控制器中调用一个动作,它将被发送到上面的登录操作,然后返回到请求的控制器/操作.哪个好,但是怎么样?它安全吗?

在这篇关于" 防止开放式重定向攻击 "的文章中(对于早期版本的Asp.Net MVC),建议在进行重定向之前检查一下returnUrl它是一个本地URL,是我应该做的还是它呢?现在由框架处理?

干杯,奥拉

1 个回答
  • 您需要使用此方法检查URL是否确实是本地的(它不​​是由框架自动处理的):http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.islocalurl% 28V = vs.118%29.aspx

    if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
    {
      return Redirect(returnUrl);
    }
    

    2023-02-09 21:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有