11

私は mvc .net アプリケーションに取り組んでおり、フォーム認証を使用しています。ユーザーが認証された後、要求したページにユーザーをリダイレクトしたい。どんな助けでも大歓迎です。

4

1 に答える 1

31

ASP.NET MVC 3 または 4 のインターネット アプリケーション プロジェクトを作成すると、認証時にリターン URL を使用する方法の完全な例が含まれます。

AuthorizeAttribute をコントローラーに追加して認証を強制すると、ユーザーが Login メソッドにリダイレクトされ、returnUrl パラメーターが自動的に追加されます。そこから、ログインフォームを表示するときにそれを追跡する必要があります:

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

次に、ログイン フォームのルート コレクションに追加します。

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

}

ユーザーがログインを送信したら、適切に認証されていると仮定して、returnUrl にリダイレクトします。

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

最も難しい部分は、GET/POST シーケンスを通じて ReturnUrl を追跡することです。

AuthorizeAttribute がどのように機能するかを確認したい場合は、この StackOverflowの投稿で、元のリクエストで returnUrl を設定する方法を示しています。

また、returnUrl が実際にローカル URL であることを確認する必要があります。そうしないと、オープン リダイレクト攻撃に対して脆弱になります。RedirectToLocal() は、この検証を行う MVC 4 Internet Application テンプレートのヘルパー メソッドです。

private ActionResult RedirectToLocal(string returnUrl)
{
     if (Url.IsLocalUrl(returnUrl))
     {
          return Redirect(returnUrl);
     }
     else
     {
          return RedirectToAction("Index", "Home");
     }
}
于 2012-10-30T19:26:59.247 に答える