如何重定向到returnUrl在Asp.Net MVC5中工作
发布时间:2020-12-16 00:19:24 所属栏目:asp.Net 来源:网络整理
导读:我已经开始使用新的Asp.Net Identity with Owin创建了一个新的MVC 5站点.在我的“帐户”控制器中,它具有[授权]属性,我有相当标准的操作; // GET: /User/Login [AllowAnonymous] public ActionResult Login(string returnUrl) { ViewBag.ReturnUrl = returnUr
我已经开始使用新的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<ActionResult> 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]的控制器中调用一个动作,它将被发送到上面的登录操作,然后返回到请求的控制器/操作.哪个好,但是怎么样?它安全吗? 在这篇关于“Preventing open redirect attacks”(对于早期版本的Asp.Net MVC)的文章中,建议在执行重定向之前检查returnUrl是否是本地URL,这是我应该做的还是现在由框架? 干杯, 解决方法
您需要使用此方法检查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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 什么是ASP.NET?
- 来份ASP.NET Core尝尝
- asp.net – 为什么在设置@Page masterPageFIle时不暗示@Mas
- ASP.net webforms中的异步页面处理示例(.NET 2.0)
- asp.net-mvc – 使用breeze js不直接与DBContext交互
- asp.net-mvc – 如何提交本地jqgrid数据和表单输入元素
- 如何在ASP.NET 5和Visual Studio 2015 CTP中添加常规类lib引
- asp.net – 持续集成和自动化测试策略
- Asp.net全局输出缓存
- asp.net – Visual Studio源代码控制/版本控制,Vault与Git(