最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

首先寫一個簡單的接口。

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

由于有Authorize標記,訪問函數(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)文章

最新評論

济宁市| 永平县| 金乡县| 昭平县| 塔河县| 略阳县| 昭平县| 滨海县| 南京市| 长武县| 广饶县| 周宁县| 望奎县| 农安县| 阿巴嘎旗| 察隅县| 和林格尔县| 禄丰县| 保亭| 北票市| 鄂尔多斯市| 宁河县| 东辽县| 柯坪县| 贵德县| 普陀区| 武平县| 泽州县| 大悟县| 大厂| 台北市| 勐海县| 视频| 夏河县| 塔城市| 枣阳市| 贵阳市| 建德市| 莲花县| 九龙县| 合川市|