大家在使用ASP.NET的時候一定都用過FormsAuthentication做登錄用戶的身份認證,FormsAuthentication的核心就是Cookie,ASP.NET會將用戶名存儲在Cookie中。
現在到了ASP.NET CORE的時代,但是ASP.NET CORE中沒有FormsAuthentication這個東西,那么怎么做身份認證呢?答案是ASP.NET CORE已經為我們內置了Cookie身份認證的功能,而且使用起來非常方便,注意本文是基于ASP.NET CORE 2.0版本來闡述Cookie認證方式的。
1.從ASP.NET CORE OWIN框架中啟用Cookie身份認證功能
要在ASP.NET CORE中使用Cookie身份認證,第一步就是在項目中的OWIN框架文件Startup.cs中啟用Cookie身份認證中間件。
首先我們在Startup中的ConfigureServices方法中使用services.AddAuthentication注冊Cookie認證服務,如下代碼所示:
public void ConfigureServices(IServiceCollection services){ services.AddMvc(); //注冊Cookie認證服務 services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();}然后在Startup中的Configure方法中使用app.UseAuthentication啟用Cookie認證中間件(注意其中app.UseAuthentication和app.UseMvc的調用順序不能反),如下代碼所示:
public void Configure(IApplicationBuilder app, IHostingEnvironment env){ if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); //注意app.UseAuthentication方法一定要放在下面的app.UseMvc方法前面,否者后面就算調用HttpContext.SignInAsync進行用戶登錄后,使用 //HttpContext.User還是會顯示用戶沒有登錄,并且HttpContext.User.Claims讀取不到登錄用戶的任何信息。 //這說明Asp.Net OWIN框架中MiddleWare的調用順序會對系統功能產生很大的影響,各個MiddleWare的調用順序一定不能反 app.UseAuthentication(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }2.登錄用戶
在ASP.NET CORE中使用Cookie認證登錄用戶的方法和傳統的FormsAuthentication不太一樣,大致步驟如下:
創建Claim類型的數組,將登錄用戶的所有信息(比如用戶名)存儲在Claim類型的字符串鍵值對中
將上面創建的Claim類型的數組傳入ClaimsIdentity中,用來構造一個ClaimsIdentity對象
將上面創建的ClaimsIdentity對象傳入ClaimsPrincipal中,用來構造一個ClaimsPrincipal對象
調用HttpContext.SignInAsync方法,傳入上面創建的ClaimsPrincipal對象,完成用戶登錄
所以我們可以看到整個ASP.NET CORE的Cookie認證登錄流程比以前ASP.NET的FormsAuthentication還是要復雜許多,畢竟以前一個FormsAuthentication.SetAuthCookie方法就搞定了。
在本文的例子中我們在項目中默認的HomeController中創建了一個Acion方法Login,來實現用戶登錄的代碼。當然這里我們實現的是最簡的Cookie登錄,下面代碼中實際上還可以設置Cookie是否持久化、Cookie多久過期、存儲登錄用戶信息的Cookie的名字是什么等,我們就不做過多介紹了,大家可以閱讀本文最后推薦的兩份官方文檔了解更多。
新聞熱點
疑難解答
圖片精選