Asp.net核心中如何实现自定义身份认证功能

  介绍

这篇文章主要介绍“Asp.net核心中如何实现自定义身份认证功能”,在日常操作中,相信很多人在Asp.net核心中如何实现自定义身份认证功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“Asp.net核心中如何实现自定义身份认证功能”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Asp。网络核心中虽然集成了许多常用的身份认证,但很多时候,我们还是需要实现自己的身份认证接口,本文这里就简单的介绍下如何实现自定义身份认证接口。

首先写一个简单的接口。

(授权)   (HttpGet)   public  object  Foo ()   {   return 才能DateTime.Now.ToString ();   }

由于有授权标记,访问函数体前会判断用户是否通过认证,由于这里没有通过认证,会的得到一个500错误。

 Asp.net核心中如何实现自定义身份认证功能

自定义认证处理类:

实现一个IAuthenticationHandler接口即可:

public  class  MyAuthHandler : IAuthenticationHandler   {才能   ,,,public  const  string  SchemeName =,“MyAuth";      ,,,AuthenticationScheme  _scheme;   ,,,HttpContext ,,,, _context;      ,,,///,& lt; summary>   ,,,///,初始化认证   ,,,///,& lt;/summary>   ,,,public  Task  InitializeAsync (AuthenticationScheme 方案,HttpContext 上下文)   ,,,{   ,,,,,_scheme =,计划;   ,,,,,_context =,上下文;   ,,,,,return  Task.CompletedTask;   ,,,}      ,,,///,& lt; summary>   ,,,///,认证处理   ,,,///,& lt;/summary>   ,,,public  Task, AuthenticateAsync ()   ,,,{   ,,,,,var  req ,,=, _context.Request.Query;   ,,,,,var  isLogin =,点播(“isLogin") .FirstOrDefault ();      ,,,,,if  (isLogin  !=,“true")   ,,,,,{   ,,,,,,,return  Task.FromResult (AuthenticateResult.Fail(“未登陆“));   ,,,,,}      ,,,,,var  ticket =, GetAuthTicket (“test",,“test");   ,,,,,return  Task.FromResult (AuthenticateResult.Success(票);   ,,,}      ,,,AuthenticationTicket  GetAuthTicket(名称、string  string 角色)   ,,,{   ,,,,,var  claimsIdentity =, new  ClaimsIdentity (new 主张[]   ,,,,,{   ,,,,,,,new  (ClaimTypes.Name,名称),   ,,,,,,,new  (ClaimTypes.Role,角色),   ,,,,,},,“My_Auth");      ,,,,,var  principal =, new  ClaimsPrincipal (claimsIdentity);   ,,,,,return  new  AuthenticationTicket(校长,_scheme.Name);   ,,,}      ,,,///,& lt; summary>   ,,,///,权限不足时的处理   ,,,///,& lt;/summary>   ,,,public  Task  ForbidAsync (AuthenticationProperties 属性)   ,,,{   ,,,,,_context.Response.StatusCode =, (int) HttpStatusCode.Forbidden;   ,,,,,return  Task.CompletedTask;   ,,,}      ,,,///,& lt; summary>   ,,,///,未登录时的处理   ,,,///,& lt;/summary>   ,,,public  Task  ChallengeAsync (AuthenticationProperties 属性)   ,,,{   ,,,,,_context.Response.StatusCode =, (int) HttpStatusCode.Unauthorized;   ,,,,,return  Task.CompletedTask;   ,,,}   以前,,}

主体函数是AuthenticateAsync,主要进行了如下几步

首先是根据http上下文判断用户是否通过认证,这里我实现的比较简单,判断下查询字符串中的IsLogin是否为真,为真则通过验证。如果通过认证,则生成一个ClaimsPrincipal对象,返回认证成功

ClaimsPrincipal对象它是。net核心的验证模型asp。网络核心的验证模型是基于声明的身份验证、网上有一些文章来介绍他介绍身份验证与ASP。网络核心。他们代表的意义如下:

声称是用户信息,例如用户名,角色,邮件。一般常用的是用户名和角色。特别是角色,经常接用于授权信息中。一组声称构成了一个身份,构成了ClaimsIdentity对象,可以把ClaimsIdentity理解为“证件“,驾照是一种证件,护照也是一种证件。理解记录了用户的基本信息.ClaimsIdentity的持有者就是ClaimsPrincipal,一个ClaimsPrincipal可以持有多个ClaimsIdentity,就比如一个人既持有驾照,又持有护照。

认证通过后,也可以通过HttpContext.User属性获取这个对象,从而获取用户名,角色等信息

注册自定义认证处理类:

在启动。cs中进行如下配置:

Asp.net核心中如何实现自定义身份认证功能