欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Asp.net Core中實現(xiàn)自定義身份認證的示例代碼

 更新時間:2020年05月12日 09:44:40   作者:天方  
這篇文章主要介紹了Asp.net Core中實現(xiàn)自定義身份認證的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Asp.Net Core中雖然集成了許多常用的身份認證,但很多時候,我們還是需要實現(xiàn)自己的身份認證接口,本文這里就簡單的介紹下如何實現(xiàn)自定義身份認證接口。

首先寫一個簡單的接口。

[Authorize]
[HttpGet]
public object Foo()
{
  return DateTime.Now.ToString();
}

由于有Authorize標(biāo)記,訪問函數(shù)體前會判斷用戶是否通過認證,由于這里沒有通過認證,會的得到一個500錯誤。

自定義認證處理類:

實現(xiàn)一個IAuthenticationHandler接口即可:

public class MyAuthHandler : IAuthenticationHandler
  {
    public const string SchemeName = "MyAuth";

    AuthenticationScheme _scheme;
    HttpContext     _context;

    /// <summary>
    /// 初始化認證
    /// </summary>
    public Task InitializeAsync(AuthenticationScheme scheme, HttpContext context)
    {
      _scheme = scheme;
      _context = context;
      return Task.CompletedTask;
    }

    /// <summary>
    /// 認證處理
    /// </summary>
    public Task<AuthenticateResult> AuthenticateAsync()
    {
      var req   = _context.Request.Query;
      var isLogin = req["isLogin"].FirstOrDefault();

      if (isLogin != "true")
      {
        return Task.FromResult(AuthenticateResult.Fail("未登陸"));
      }

      var ticket = GetAuthTicket("test", "test");
      return Task.FromResult(AuthenticateResult.Success(ticket));
    }

    AuthenticationTicket GetAuthTicket(string name, string role)
    {
      var claimsIdentity = new ClaimsIdentity(new Claim[]
      {
        new Claim(ClaimTypes.Name, name),
        new Claim(ClaimTypes.Role, role),
      }, "My_Auth");

      var principal = new ClaimsPrincipal(claimsIdentity);
      return new AuthenticationTicket(principal, _scheme.Name);
    }

    /// <summary>
    /// 權(quán)限不足時的處理
    /// </summary>
    public Task ForbidAsync(AuthenticationProperties properties)
    {
      _context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
      return Task.CompletedTask;
    }

    /// <summary>
    /// 未登錄時的處理
    /// </summary>
    public Task ChallengeAsync(AuthenticationProperties properties)
    {
      _context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
      return Task.CompletedTask;
    }
  }

主體函數(shù)是AuthenticateAsync,主要進行了如下幾步

首先是根據(jù)http上下文判斷用戶是否通過認證,這里我實現(xiàn)的比較簡單,判斷下querystring中的IsLogin是否為true,為true則通過驗證。如果通過認證,則生成一個ClaimsPrincipal對象,返回認證成功

ClaimsPrincipal對象它是.net core的驗證模型。ASP.NET Core 的驗證模型是claims-based authentication,網(wǎng)上有一些文章來介紹他Introduction to Authentication with ASP.NET Core。他們代表的意義如下:

Claim是用戶信息,例如用戶名,角色,郵件。一般常用的是用戶名和角色。特別是角色,經(jīng)常接用于授權(quán)信息中。一組claims構(gòu)成了一個identity,構(gòu)成了ClaimsIdentity對象,可以把ClaimsIdentity理解為"證件",駕照是一種證件,護照也是一種證件。理解記錄了用戶的基本信息。ClaimsIdentity的持有者就是ClaimsPrincipal,一個ClaimsPrincipal可以持有多個ClaimsIdentity,就比如一個人既持有駕照,又持有護照。

認證通過后,也可以通過HttpContext.User屬性獲取這個對象,從而獲取用戶名,角色等信息

注冊自定義認證處理類:

在startup.cs中進行如下配置:

開啟身份驗證中間件

app.UseAuthentication();
app.UseAuthorization();

配置選項

services.AddAuthentication(options =>
  {
    options.AddScheme<MyAuthHandler>(MyAuthHandler.SchemeName, "default scheme");
    options.DefaultAuthenticateScheme = MyAuthHandler.SchemeName;
    options.DefaultChallengeScheme  = MyAuthHandler.SchemeName;
  });

測試:

上述功能完成后,再進行前面的測試,在url中帶上認證信息訪問:

可以看到這次能成功訪問接口,說明認證信息是生效了的。

到此這篇關(guān)于Asp.net Core中實現(xiàn)自定義身份認證的示例代碼的文章就介紹到這了,更多相關(guān)Asp.net Core自定義身份認證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • .NetCore使用MailKit發(fā)送和接收郵件的方法

    .NetCore使用MailKit發(fā)送和接收郵件的方法

    MailKit是一個開源的.NET庫,提供了對SMTP、POP3和IMAP的訪問,使得發(fā)送和接收電子郵件變得簡單,下面是一個基本的示例,展示了如何使用MailKit來發(fā)送和接收郵件,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • ASP.Net Post方式獲取數(shù)據(jù)流的一種簡單寫法

    ASP.Net Post方式獲取數(shù)據(jù)流的一種簡單寫法

    這篇文章主要介紹了ASP.Net Post方式獲取數(shù)據(jù)流的一種簡單寫法,本文直接給出代碼實例,需要的朋友可以參考下
    2015-05-05
  • asp.net(C#)函數(shù)對象參數(shù)傳遞的問題

    asp.net(C#)函數(shù)對象參數(shù)傳遞的問題

    我們知道在.net里class是引用類型,在函數(shù)參數(shù)表中的對象傳遞的都是對象的引用,所以在函數(shù)體內(nèi)對其對象參數(shù)的修改會影響函數(shù)外對應(yīng)的對象本身,例如下面的程序.
    2009-12-12
  • 把程序集安裝到全局程序集緩存中的步驟

    把程序集安裝到全局程序集緩存中的步驟

    最近兩天在看網(wǎng)絡(luò)編程中制作簡單的http服務(wù)器,其中用到把程序集安裝到全局程序集緩存中,自己嘗試了一下,記錄一下:(首先,對共享程序集安裝計算機管理員權(quán)限)
    2008-11-11
  • asp.net批量多選文件上傳解決方案

    asp.net批量多選文件上傳解決方案

    這篇文章主要介紹了asp.net批量多選文件上傳解決方案,基于flex開發(fā)的一個多選上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-08-08
  • 小心!ASP.NET網(wǎng)站發(fā)布時的那些坑

    小心!ASP.NET網(wǎng)站發(fā)布時的那些坑

    ASP.NET網(wǎng)站發(fā)布時的那些坑,要小心了,為什么網(wǎng)站發(fā)布后,每個頁面第一次打開都很卡?ASP.NET session 頻繁丟失如何解決?具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 更方便快捷的外部操作數(shù)據(jù)庫的方法(另類玩法)

    更方便快捷的外部操作數(shù)據(jù)庫的方法(另類玩法)

    數(shù)據(jù)庫操作方法很多,各種各樣但是外部操作數(shù)據(jù)庫的方法就會顯得格外陌生了,感興趣的朋友可以詳細了解下本文,或許對你學(xué)習(xí)ado.net有所幫助
    2013-02-02
  • asp.net 多字段模糊查詢代碼

    asp.net 多字段模糊查詢代碼

    經(jīng)常用到多字段的模糊查詢,上面的函數(shù)可以實現(xiàn),例如strKeyWords值為“腳本之家”時
    2008-07-07
  • ASP.NET+XML打造網(wǎng)絡(luò)硬盤原理分析

    ASP.NET+XML打造網(wǎng)絡(luò)硬盤原理分析

    文件傳送常用的三種方式:FTP、Email及網(wǎng)上鄰居,都在一定程度上實現(xiàn)了文件數(shù)據(jù)的交流,但它們都主要面向“點對點”的傳送,無法實現(xiàn)一塊空間,資源互見的應(yīng)用需求,這種基于點對多的共享模式需要尋求另外的傳輸途徑,網(wǎng)絡(luò)硬盤就是一種很好的解決方式
    2012-09-09
  • ASP.NET頁面在IE緩存的清除辦法

    ASP.NET頁面在IE緩存的清除辦法

    ASP.NET頁面在IE緩存的清除辦法,需要的朋友可以參考一下
    2013-03-03

最新評論