Asp.net Core中实现自定义身份认证的示例代码
 更新时间:2020年05月12日 09:44:40   作者:天方  

这篇文章主要介绍了Asp.net Core中实现自定义身份认证的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

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

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

自定义认证处理类:
实现一个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>
/// 权限不足时的处理
/// </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;
}
}

主体函数是AuthenticateAsync,主要进行了如下几步
首先是根据http上下文判断用户是否通过认证,这里我实现的比较简单,判断下querystring中的IsLogin是否为true,为true则通过验证。如果通过认证,则生成一个ClaimsPrincipal对象,返回认证成功
ClaimsPrincipal对象它是.net core的验证模型。ASP.NET Core 的验证模型是claims-based authentication,网上有一些文章来介绍他Introduction to Authentication with ASP.NET Core。他们代表的意义如下:
Claim是用户信息,例如用户名,角色,邮件。一般常用的是用户名和角色。特别是角色,经常接用于授权信息中。一组claims构成了一个identity,构成了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中带上认证信息访问:

可以看到这次能成功访问接口,说明认证信息是生效了的。
到此这篇关于Asp.net Core中实现自定义身份认证的示例代码的文章就介绍到这了,更多相关Asp.net Core自定义身份认证内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:ASP.NET Core3.1 Ocelot认证的实现ASP.NET Core使用JWT认证授权的方法深入解读ASP.NET Core身份认证过程实现ASP.NET Core 实现基本认证的示例代码ASP.NET Core学习之使用JWT认证授权详解ASP.NET Core Authentication认证实现方法浅谈ASP.NET Core 中jwt授权认证的流程原理ASP.Net Core3.0中使用JWT认证的实现Asp.Net Core基于JWT认证的数据接口网关实例代码ASP.NET学习CORE中使用Cookie身份认证方法Asp.Net Core添加请求头自定义认证的示例

Asp.net
Core
身份认证

相关文章
asp.net 2.0里也可以用JSON的使用方法本人找到一份,可以在asp.net2.0里实现JSON方式传送数据的方法。但是原方法,不能在数据中带有{、}、[、]、"等,所以我做特意做了转意。 2010-03-03
使用 Visual Studio 的“代码度量值”来改进代码质量代码度量是一组软件度量值,使开发人员可以更好地了解他们正在开发的代码.这篇文章主要介绍了通过 Visual Studio 的“代码度量值”来改进代码质量,需要的朋友可以参考下 2017-11-11
asp.net网页里面为什么找不到CS文件这篇文章主要介绍了asp.net为什么网页里面找不到CS文件,如何才能够cs文件显示出来 2014-05-05
Asp.Net 网站优化系列之数据库优化分字诀上 分库当我们的数据量很小的时候,我们会把用户表,博客表,论坛表,闪存表等等都砸在一个库里,我们的业务增长的很好,在不久之后我们尽力的优化了查询,但是效果依然不佳,这时候用分字诀的时机到了。 2010-06-06
基于.NET的FluentValidation数据验证实现这篇文章主要介绍了基于.NET的FluentValidation数据验证实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2020-11-11
ASP.NET网站实时显示时间的方法这篇文章主要介绍了ASP.NET网站实时显示时间的方法,主要通过AJAX控件来实现该功能,是非常具有实用价值的技巧,需要的朋友可以参考下 2014-11-11
超好用轻量级MVC分页控件JPager.Net本文给大家分享的是一款超好用轻量级MVC分页控件–JPager.Net,小编自己也在使用,非常的不错,推荐给大家。 2016-06-06
.Net Core简单使用Mvc内置的Ioc(续)怎样直接获取Ioc中的实例对象,而不是以构造函数的方式进行获取呢?这篇文章继续为大家介绍.Net Core简单使用Mvc内置的Ioc 2018-03-03
VS2015 免费插件Refactoring EssentialsRefactoring Essentials是一款用于代码分析和重构的开源免费VS2015插件,其功能丰富强大,必然会成为类似Web Essentials这样的必备插件。 2015-07-07
Asp.NET页面中事件加载的先后顺序详解这篇文章主要给大家介绍了关于Asp.NET页面中事件加载的先后顺序,文中通过图文以及示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 2017-08-08

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。