Owinで新しいAsp.Net Identityを使用して、新しいMVC 5サイトを開始しました。属性[Authorize]を持つ私の "account"コントローラでは、私はかなり標準的なアクションを持っています。return_rlへのリダイレクトは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);
}
私の質問は、にreturnurl行動に関してであり、上記のコードは、ユーザーがログインしていない場合、という意味で動作し、属性[承認]を持っているコントローラでアクションを呼び出して、それが取得します上記のログインアクションに送信され、次に要求されたコントローラ/アクションに戻されます。どちらが素晴らしいですが、どのように?それは安全ですか?
この記事では、 "Preventing open redirect attacks"(以前のバージョンのAsp.Net MVC)については、リダイレクトを行う前にローカルURLであることをreturnUrlで確認することをお勧めします。それは今フレームワークによって処理されましたか?
乾杯、 オラ
あなたはそれが処理されないことを見るための任意のソースを持っていますか? returnUrlに自動的にリダイレクトする機能を追加するのではなく、独自のガイドラインに従わないというのは奇妙なことです。したがって元の質問。 –
returnUrlを操作して何が起こるのを見てみませんか?ところで、あなたのコードでは、 'returnUrl'引数は決して使用されません。 – Marthijn
ええ、それは1つのオプションになると思います。私はreturnUrlが決して私のアクションで使われていないことを知っていますが、それでもサイトは正しくリダイレクトされています。それがどういう仕組みか、魔法か、まったく何かが並んでいるのだろうか?そのもの? –