web-dev-qa-db-ja.com

カスタム認証とASP.NET MVC

ASP.NET 4で構築されている内部Webアプリがあります。別のチームが作成した認証APIの使用に固執しています。サイトのユーザーがサイトに対して正常に認証された場合、サイト全体へのアクセスを許可したいと思います。

ASP.NET WebFormの日は、カスタムユーザーオブジェクトをセッションに保持するために使用していました。そのオブジェクトがnullだった場合、ユーザーが認証されていないことがわかりました。 MVCにこれに似た、しかし改善された方法はありますか。可能であれば、ASP.NETメンバーシップモデルの独自のプロバイダーを構築する必要はありません。これを行う最も簡単な方法は何ですか?

27
BuddyJoe

次のように、Forms AuthenticationAuthorize属性と組み合わせて使用​​できます。

ビューへのアクセスを制限するには:

以下に示すように、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");
}
44
Jatin patil

おそらく、カスタム 認証フィルター が必要です。以下に例を示します。 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());
5
volpav

次のようなものを試すことができます:

FormsAuthentication.SetAuthCookie(username, rememberMe);

認証済みユーザーのCookieを設定するには、認証が必要なコントローラーまたはアクションで[Authorize]属性を使用します。

詳細については、件名をググリングしてみてください。MVCでの認証と承認に関するものがたくさんあります。

4
Daniele

MVCで実行できるフォームでできることはすべて、コントローラーのログインアクションでセッション変数を設定するだけです。

または、これを行うことができます:ログインアクションでformsauthentication.setauthcookie("username")を追加します

この後、[Authorize]キーワードを使用したアクションは、現在のユーザーを許可します。

1
Solmead