ASP.NET 4
で構築されている内部Webアプリがあります。別のチームが作成した認証APIの使用に固執しています。サイトのユーザーがサイトに対して正常に認証された場合、サイト全体へのアクセスを許可したいと思います。
ASP.NET
WebFormの日は、カスタムユーザーオブジェクトをセッションに保持するために使用していました。そのオブジェクトがnullだった場合、ユーザーが認証されていないことがわかりました。 MVC
にこれに似た、しかし改善された方法はありますか。可能であれば、ASP.NETメンバーシップモデルの独自のプロバイダーを構築する必要はありません。これを行う最も簡単な方法は何ですか?
次のように、Forms Authentication
をAuthorize
属性と組み合わせて使用できます。
ビューへのアクセスを制限するには:
以下に示すように、AuthorizeAttribute属性をアクションメソッド宣言に追加します。
[Authorize]
public ActionResult Index()
{
return View();
}
Web.configでのフォーム認証の構成
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
ログインポストアクション:ユーザーが有効な場合、認証Cookieを設定します
[HttpPost]
public ActionResult Login(User model, string returnUrl)
{
//Validation code
if (userValid)
{
FormsAuthentication.SetAuthCookie(username, false);
}
}
ログオフアクション:
public ActionResult LogOff()
{
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Home");
}
おそらく、カスタム 認証フィルター が必要です。以下に例を示します。 MVCのカスタムフィルター 。その後、アプリの起動時にこのフィルターをグローバルに適用できます(RegisterGlobalFilters
を使用)。
public class LegacyAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (HttpContext.Current.Session["User"] == null)
base.HandleUnauthorizedRequest(actionContext);
}
}
次に、global.asax
次のようなものがあります。
GlobalFilters.Filters.Add(new LegacyAuthorize());
次のようなものを試すことができます:
FormsAuthentication.SetAuthCookie(username, rememberMe);
認証済みユーザーのCookieを設定するには、認証が必要なコントローラーまたはアクションで[Authorize]
属性を使用します。
詳細については、件名をググリングしてみてください。MVCでの認証と承認に関するものがたくさんあります。
MVCで実行できるフォームでできることはすべて、コントローラーのログインアクションでセッション変数を設定するだけです。
または、これを行うことができます:ログインアクションでformsauthentication.setauthcookie("username")
を追加します
この後、[Authorize]キーワードを使用したアクションは、現在のユーザーを許可します。