ASP.NET MVC 身份認證


身份認證的好處就是, 如果這個頁面沒有登錄, 刷新后會自動跳到登錄頁要求登錄,保證了應用程序的安全。而Forms 身份認證是web下最常用的,如何配置呢?見下(基於mvc 4)

1.在webconfig,<system.web>節點下加如下配置

<authentication mode="Forms">
  <forms loginUrl="~/Login"/>
</authentication>

 

2.配置RouteConfig,將defaults 配置為從Login啟動,這樣啟動頁就是登錄頁了

  public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
            );
        }

3.編寫FormsAuth 身份認證類

 public class FormsAuth
    {
        public static void SignIn()
        {
            //創建一個FormsAuthenticationTicket,它包含登錄名以及額外的用戶數據。
            var ticket = new FormsAuthenticationTicket(2,
                "anuodog", DateTime.Now, DateTime.Now.AddDays(1), true, "密碼:123");

            //加密Ticket,變成一個加密的字符串。
            var cookieValue = FormsAuthentication.Encrypt(ticket);

            //根據加密結果創建登錄Cookie
            var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieValue)
            {
                HttpOnly = true,
                Secure = FormsAuthentication.RequireSSL,
                Domain = FormsAuthentication.CookieDomain,
                Path = FormsAuthentication.FormsCookiePath
            };

            cookie.Expires = DateTime.Now.AddMinutes(20);

            var context = HttpContext.Current;

            //寫登錄Cookie
            context.Response.Cookies.Remove(cookie.Name);
            context.Response.Cookies.Add(cookie);
        }

        public static void SingOut()
        {
            FormsAuthentication.SignOut();
        }

    }

4. 在LoginController 里面調用FormsAuth 類中的登入登出方法

   public class LoginController : Controller
    {

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult DoLogin()
        {
            FormsAuth.SignIn();

            return Json("success");
        }

        public ActionResult DoLogout()
        {
            FormsAuth.SingOut();

            return Json("success");
        }

    }

5.在項目App_Start文件夾中找到 FilterConfig類 ,並添加一個配置,請看下面代碼注釋

 public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new AuthorizeAttribute());//新添加此配置的作用是給所有Action方法都加了個[Authorize]特性,這樣,每當訪問這個Action時如果沒有通過身份認證,將彈跳至登陸頁,要求登陸。
        }
    }

6.如果想更細粒度的控制,Action的訪問,可以去掉5步驟的配置,並在需要控制的Action上 加[Authorize]特性就行了,這樣如果訪問的這個Action有[Authorize]特性並且又沒登陸就會被跳到登陸頁,如下:

 public class PtypeController : Controller
    {

        [Authorize]
        public ActionResult Index()
        {
            return View();
        }

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM