这篇文章主要介绍“Asp.net核心中如何实现自定义身份认证功能”,在日常操作中,相信很多人在Asp.net核心中如何实现自定义身份认证功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“Asp.net核心中如何实现自定义身份认证功能”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
Asp。网络核心中虽然集成了许多常用的身份认证,但很多时候,我们还是需要实现自己的身份认证接口,本文这里就简单的介绍下如何实现自定义身份认证接口。
首先写一个简单的接口。
(授权) (HttpGet) public object  Foo () { return 才能DateTime.Now.ToString (); }
由于有授权标记,访问函数体前会判断用户是否通过认证,由于这里没有通过认证,会的得到一个500错误。
自定义认证处理类:
实现一个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核心中如何实现自定义身份认证功能