Odpowiedz

30

Jeśli utworzysz projekt aplikacji internetowej ASP.NET MVC 3 lub 4, będzie to pełny przykład użycia adresu URL powrotu podczas uwierzytelniania.

Dodanie AuthorizeAttribute do kontrolera w celu wymuszenia uwierzytelnienia spowoduje przekierowanie użytkownika do metody logowania i automatyczne dołączenie parametru returnUrl. Stamtąd trzeba śledzić to, jak pokazać swój formularz logowania:

public ActionResult Login(string returnUrl) 
{ 
    ViewBag.ReturnUrl = returnUrl; 
    return View(); 
} 

a następnie dodać go do formularza logowania w kolekcji Trasa:

@*//ReSharper disable RedundantAnonymousTypePropertyName*@ 
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) { 
@*//ReSharper restore RedundantAnonymousTypePropertyName*@ 

} 

Gdy użytkownik wysyła login, zakładając one uwierzytelniać prawidłowo, to po prostu przekierować do ReturnURL:

[HttpPost] 
public ActionResult Login(LoginModel model, string returnUrl) 
{ 
    return RedirectToLocal(returnUrl); 
} 

najtrudniej jest śledzenie na ReturnURL pośrednictwem sekwencji GET/POST.

Jeśli chcesz zobaczyć, jak działa AuthorizeAttribute, post: this StackOverflow pokazuje ustawienie returnUrl z pierwotnym żądaniem.

Musisz także upewnić się, że validus returnUrl naprawdę jest lokalnym adresem URL, lub stajesz się podatny na ataki typu "open redirection". RedirectToLocal() to metoda pomocnika z MVC szablon Application 4 internetowego, który robi to Walidacja:

private ActionResult RedirectToLocal(string returnUrl) 
{ 
    if (Url.IsLocalUrl(returnUrl)) 
    { 
      return Redirect(returnUrl); 
    } 
    else 
    { 
      return RedirectToAction("Index", "Home"); 
    } 
} 
+0

bardzo dziękuję, że to działa teraz :) –

+2

@HediNaily: jeden punkt do zapamiętania nie jest zaufanie ReturnURL oraz do sprawdź to przed użyciem, aby przekierować użytkownika –

+2

@ mohsen.d Uzgodnione. RedirectToLocal() to pomocnik MVC 4 zawarty w szablonie aplikacji internetowej, który sprawdza poprawność adresu URL przed przekierowaniem. Dodam go do odpowiedzi dla osób bez metody pomocnika. – mfanto

Powiązane problemy