Tôi đã bắt đầu một trang web MVC 5 mới, sử dụng Asp.Net Identity mới với Owin. Trong bộ điều khiển "tài khoản" của tôi có thuộc tính [Authorize], tôi có các hành động khá chuẩn;Cách chuyển hướng đến returnUrl hoạt động trong Asp.Net MVC5
// 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);
}
Câu hỏi của tôi là liên quan đến các hành vi ReturnURL, các mã trên hoạt động trong ý nghĩa đó, nếu người dùng không đăng nhập và kêu gọi một hành động trong một bộ điều khiển có thuộc tính [Duyệt], nó được được gửi đến các hành động đăng nhập ở trên và sau đó quay lại bộ điều khiển/hành động đã được yêu cầu. Đó là tuyệt vời, NHƯNG làm thế nào ?? Và nó có an toàn không?
Trong bài viết này về "Preventing open redirect attacks" (đối với phiên bản trước của Asp.Net MVC) đề xuất là thực hiện kiểm tra trên returnUrl rằng đó là url cục bộ trước khi thực hiện chuyển hướng, đó là điều tôi vẫn nên làm hoặc là nó bây giờ được xử lý bởi khuôn khổ?
Chúc mừng, Ola
Bạn có bất cứ nguồn cho các thông tin mà nó không được xử lý? Có vẻ lạ rằng họ sẽ đưa vào các chức năng để chuyển hướng đến returnUrl tự động nhưng không làm theo hướng dẫn riêng của họ khi làm như vậy. Do đó câu hỏi ban đầu. –
Tại sao bạn không cố gắng thao tác returnUrl và xem điều gì sẽ xảy ra? Nhân tiện, trong mã của bạn, đối số 'returnUrl' không bao giờ được sử dụng. – Marthijn
Vâng tôi đoán đó sẽ là một lựa chọn. Tôi biết returnUrl không bao giờ được sử dụng trong hành động của tôi, nhưng trang web vẫn chuyển hướng chính xác, đó là lý do tại sao tôi tự hỏi nó hoạt động như thế nào, ma thuật hay chỉ là điều gì đó xảy ra để xếp hàng? Hay là họ đã thêm hỗ trợ tự động cho thứ đó? –