Asp.Net Core中基于Session的身份驗證的實現(xiàn)
在Asp.Net框架中提供了幾種身份驗證方式:Windows身份驗證、Forms身份驗證、passport身份驗證(單點登錄驗證)。
每種驗證方式都有適合它的場景:
1.Windowss身份驗證通常用于企業(yè)內部環(huán)境,Windows Active Directory就是基于windows平臺的身份驗證實現(xiàn);
2.Forms身份驗證是Asp.Net框架中提出的另一種驗證方式;
3.passport身份驗證是微軟提供的基于自己的lives賬號實現(xiàn)的單點認證服務。
Asp.net Core驗證碼登錄遇到兩個小問題
第一是在Asp.net Core中引用dll,以往我們引用DLL都是直接引用,在Core里這樣是不行的,必須基于NuGet添加,或者基于project.json添加,然后保存VS會啟動還原類庫。
第二就是使用Session的問題,Core里使用Session需要添加Session類庫。
第一步:在你的項目上基于NuGet添加:
install-package Microsoft.AspNetCore.Session -ver 2.0 install-package Microsoft.AspNetCore.Http.Extensions -ver 2.0
第二步:修改startup.cs
在startup.cs找到方法ConfigureServices(IServiceCollection services) 注入Session(這個地方是Asp.net Core pipeline):
services.AddSession();
接下來我們要告訴Asp.net Core使用內存存儲Session數(shù)據,在Configure(IApplicationBuilder app,...)方法中添加代碼:
app.UseSession();
基于Session的身份驗證實現(xiàn)
這種方式可能是在Asp.Net框架提供的幾種驗證方式之外的最常用的身份驗證方式。
實現(xiàn)原理
1.客戶端發(fā)送身份認證數(shù)據到服務器端
2.服務器收到并驗證后將用戶信息保存到Session對象中,然后生成對應的標識并將標識寫入cookie中
3.當客戶端下次請求時帶上該cookie標識
4.服務器通過該cookie標識從session對象中獲取對應的用戶信息
Asp.Net Core中的Session身份認證實現(xiàn)
基于Session的身份認證并不是Asp.Net Core中推薦的認證方式,因為Asp.Net Core中有更高級的Forms身份認證方式,不過在這里不是本文章的主題,我們只講如何在Asp.Net Core中實現(xiàn)基于Session的身份認證。
我們先創(chuàng)建一個用于代碼演示的基礎項目
dotnet new razor -n SessionSample
在startup.cs中啟用session功能
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
...
//添加session服務
services.AddSession();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
//啟用session
app.UseSession();
app.UseMvc();
}
}
創(chuàng)建一個MyPage.cs文件,我們在該類中實現(xiàn)了一個IsLogin屬性,該屬性用來判斷用戶的登陸狀態(tài):
public class MyPage:PageModel
{
protected bool IsLogin
{
get
{
string userId = null;
//從sessin中獲取UserId對應的用戶信息來判斷用戶是否登陸
if (HttpContext.Session.TryGetValue("UserId", out byte[] bytes))
{
userId = Encoding.UTF8.GetString(bytes);
}
return !string.IsNullOrWhiteSpace(userId);
}
}
}
我們已經實現(xiàn)了驗證,現(xiàn)在缺少的是如何在session中添加UserId的信息,我們來創(chuàng)建一個Login頁面:
dotnet new page -n Login
public class LoginModel : MyPage
{
public void OnGet()
{
if(IsLogin)
{
//如果已經登陸就跳轉到/Index頁面
RedirectToPage("/Index");
}
}
public IActionResult OnPost()
{
//這里我們將UserId寫入session中
HttpContext.Session.SetString("UserId", Guid.NewGuid().ToString());
return RedirectToPage("/Index");
}
}
給現(xiàn)有的頁面添加驗證功能,打開Index頁面,添加如下代碼:
public class IndexModel : MyPage
{
public IActionResult OnGet()
{
if (!IsLogin)
{
return RedirectToPage("/Login");
}
return Page();
}
}
OK!我們已經實現(xiàn)了身份認證。
總結
我們描述了傳統(tǒng)Asp.Net中提供的幾種身份認證方式,并在Asp.Net Core實現(xiàn)了一種雖然不標準但是常用的身份認證機,看起了與Asp.Net中的用法并沒有什么區(qū)別。
在Asp.Net Core中這種用法似乎并不受歡迎,可能是因為Asp.Net Core提供了更高級的身份驗證機制吧,那么這篇文章存在的意義呢?權當做是對Asp.Net的一種紀念吧!
現(xiàn)在是.net core的時代,讓.net洗洗睡吧!以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- 如何在ASP.NET Core中使用Session的示例代碼
- 如何解決asp.net負載均衡時Session共享的問題
- 淺談ASP.NET Core中間件實現(xiàn)分布式 Session
- 解析Asp.net Core中使用Session的方法
- asp.net(C#)清除全部Session與單個Session的方法
- 詳解ASP.NET中Session的用法
- ASP.NET ASHX中獲得Session的方法
- ASP.NET將Session保存到數(shù)據庫中的方法
- asp.net session的使用與過期實例代碼
- Asp.net中判斷一個session是否合法的方法
- ASP.NET MVC在基控制器中處理Session
相關文章
asp.net 中將表單提交到另一頁 Code-Behind(代碼和html在不同的頁面)
To send Server control values from a different Web Forms page2009-04-04
asp.net(C#)函數(shù)對象參數(shù)傳遞的問題
我們知道在.net里class是引用類型,在函數(shù)參數(shù)表中的對象傳遞的都是對象的引用,所以在函數(shù)體內對其對象參數(shù)的修改會影響函數(shù)外對應的對象本身,例如下面的程序.2009-12-12
MVC4制作網站教程第二章 部分用戶功能實現(xiàn)代碼
這篇文章主要為大家詳細介紹了MVC4制作網站教程,部分用戶功能實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-08-08

