真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Asp.netCore中如何實現(xiàn)自定義身份認(rèn)證功能-創(chuàng)新互聯(lián)

這篇文章主要介紹“Asp.net Core中如何實現(xiàn)自定義身份認(rèn)證功能”,在日常操作中,相信很多人在Asp.net Core中如何實現(xiàn)自定義身份認(rèn)證功能問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Asp.net Core中如何實現(xiàn)自定義身份認(rèn)證功能”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

網(wǎng)站設(shè)計制作、做網(wǎng)站過程中,需要針對客戶的行業(yè)特點、產(chǎn)品特性、目標(biāo)受眾和市場情況進(jìn)行定位分析,以確定網(wǎng)站的風(fēng)格、色彩、版式、交互等方面的設(shè)計方向。創(chuàng)新互聯(lián)還需要根據(jù)客戶的需求進(jìn)行功能模塊的開發(fā)和設(shè)計,包括內(nèi)容管理、前臺展示、用戶權(quán)限管理、數(shù)據(jù)統(tǒng)計和安全保護(hù)等功能。

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

首先寫一個簡單的接口。

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

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

Asp.net Core中如何實現(xiàn)自定義身份認(rèn)證功能

自定義認(rèn)證處理類:

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

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

    AuthenticationScheme _scheme;
    HttpContext     _context;

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

    /// 
    /// 認(rèn)證處理
    /// 
    public Task 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);
    }

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

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

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

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

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理解為"證件",駕照是一種證件,護(hù)照也是一種證件。理解記錄了用戶的基本信息。ClaimsIdentity的持有者就是ClaimsPrincipal,一個ClaimsPrincipal可以持有多個ClaimsIdentity,就比如一個人既持有駕照,又持有護(hù)照。

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

注冊自定義認(rèn)證處理類:

在startup.cs中進(jìn)行如下配置:

開啟身份驗證中間件

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

配置選項

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

測試:

上述功能完成后,再進(jìn)行前面的測試,在url中帶上認(rèn)證信息訪問:

Asp.net Core中如何實現(xiàn)自定義身份認(rèn)證功能

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

到此,關(guān)于“Asp.net Core中如何實現(xiàn)自定義身份認(rèn)證功能”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)站名稱:Asp.netCore中如何實現(xiàn)自定義身份認(rèn)證功能-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://weahome.cn/article/gssjh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部