一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - Asp.Net Core中基于Session的身份驗證的實現

Asp.Net Core中基于Session的身份驗證的實現

2020-06-02 13:45Net_win ASP.NET教程

這篇文章主要介紹了Asp.Net Core中基于Session的身份驗證的實現

Asp.Net框架中提供了幾種身份驗證方式:Windows身份驗證、Forms身份驗證、passport身份驗證(單點登錄驗證)。

每種驗證方式都有適合它的場景:

1.Windowss身份驗證通常用于企業內部環境,Windows Active Directory就是基于windows平臺的身份驗證實現;
2.Forms身份驗證是Asp.Net框架中提出的另一種驗證方式;
3.passport身份驗證是微軟提供的基于自己的lives賬號實現的單點認證服務。

Asp.net Core驗證碼登錄遇到兩個小問題

第一是在Asp.net Core中引用dll,以往我們引用DLL都是直接引用,在Core里這樣是不行的,必須基于NuGet添加,或者基于project.json添加,然后保存VS會啟動還原類庫。

第二就是使用Session的問題,Core里使用Session需要添加Session類庫。

第一步:在你的項目上基于NuGet添加:

?
1
2
3
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):

?
1
services.AddSession();

接下來我們要告訴Asp.net Core使用內存存儲Session數據,在Configure(IApplicationBuilder app,...)方法中添加代碼:

?
1
app.UseSession();

基于Session的身份驗證實現

這種方式可能是在Asp.Net框架提供的幾種驗證方式之外的最常用的身份驗證方式。

實現原理

1.客戶端發送身份認證數據到服務器端
2.服務器收到并驗證后將用戶信息保存到Session對象中,然后生成對應的標識并將標識寫入cookie中
3.當客戶端下次請求時帶上該cookie標識
4.服務器通過該cookie標識從session對象中獲取對應的用戶信息

Asp.Net Core中的Session身份認證實現

? 基于Session的身份認證并不是Asp.Net Core中推薦的認證方式,因為Asp.Net Core中有更高級的Forms身份認證方式,不過在這里不是本文章的主題,我們只講如何在Asp.Net Core中實現基于Session的身份認證。

我們先創建一個用于代碼演示的基礎項目

?
1
dotnet new razor -n SessionSample

在startup.cs中啟用session功能

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Startup
{
  public void ConfigureServices(IServiceCollection services)
  {
    ...
    //添加session服務
    services.AddSession();
  }
  public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  {
    ...
    //啟用session
    app.UseSession();
    app.UseMvc();
  }
}

創建一個MyPage.cs文件,我們在該類中實現了一個IsLogin屬性,該屬性用來判斷用戶的登陸狀態:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
    }
  }
}

我們已經實現了驗證,現在缺少的是如何在session中添加UserId的信息,我們來創建一個Login頁面:

?
1
dotnet new page -n Login
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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");
  }
}

給現有的頁面添加驗證功能,打開Index頁面,添加如下代碼:

?
1
2
3
4
5
6
7
8
9
10
11
public class IndexModel : MyPage
{
  public IActionResult OnGet()
  {
    if (!IsLogin)
    {
      return RedirectToPage("/Login");
    }
    return Page();
  }
}

OK!我們已經實現了身份認證。

源代碼

總結

? 我們描述了傳統Asp.Net中提供的幾種身份認證方式,并在Asp.Net Core實現了一種雖然不標準但是常用的身份認證機,看起了與Asp.Net中的用法并沒有什么區別。

? 在Asp.Net Core中這種用法似乎并不受歡迎,可能是因為Asp.Net Core提供了更高級的身份驗證機制吧,那么這篇文章存在的意義呢?權當做是對Asp.Net的一種紀念吧!

現在是.net core的時代,讓.net洗洗睡吧!以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/guodf/p/9657348.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美s级人做人爱c视频 | 粗又长好猛好爽视频 | 国产在线精品观看 | 粉嫩国产14xxxxx0000| 精品午夜中文字幕熟女人妻在线 | 波多野结衣xxxxx在线播放 | 四川一级毛片 | 黑人巨荃大战乌克兰美女 | 日韩一区在线播放 | 国产首页精品 | 国产永久一区二区三区 | 欧美色影视 | 国产成人综合亚洲一区 | 国内免费高清视频在线观看 | 国产男女乱淫真视频全程播放 | 亚洲国产视频一区 | 天天做天天爱天天综合网 | 久久精品国产欧美日韩99热 | 午夜亚洲福利 | 国产福利一区二区在线精品 | 四虎伊人 | 草β好视频| tube4欧美4| 国产自产一区c | 亚洲精品国产一区二区在线 | 欧美色成人tv在线播放 | 人人澡 人人澡碰人人看软件 | 亚洲天天做夜夜做天天欢 | 青青青国产手机在线播放 | 国产精品嫩草影院一二三区入口 | 女人又色又爽又黄 | 清纯唯美 亚洲 | 成人网视频免费播放 | 日韩亚洲人成在线 | 深夜在线| 午夜福利在线观看6080 | 国产精品嫩草影院在线看 | 波多野结衣中文丝袜字幕 | 91麻豆国产福利在线观看 | 性色生活片在线观看 | 国产一卡 |