身份認證的好處就是, 如果這個頁面沒有登錄, 刷新后會自動跳到登錄頁要求登錄,保證了應用程序的安全。而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(); } }