Asp.net Core中实现自定义身份认证的示例代码_实用技巧

来源:脚本之家  责任编辑:小易  

不一样ASP.NET Core 是一个用于net程序跨平台的框架,在它的基础上会重写.NET Framework(windows)、Mono(Linux),以实现所有net程序、网站的跨平台ASP.net 是一种e68a84e799bee5baa6e79fa5e9819331333361326364微软推出的网站开发技术 目前一般分为 asp.net webform、asp.net mvc 两种ASP.NET Core 1.0 是一个开源跨平台的开发框架,用于构建基于云的现代 Web 应用。它是从底层开始重新构建来提供性能优良的Web应用开发框架,可以部署在云上或者本地服务器上。另外,它使得 ASP.NET 应用更加精简和模块化(可以根据你的应用需要向里面添加其他模块),跨平台(你可以很容易的在 Windows,Mac or Linux 上开发和部署你的应用),云优化(你可以在云上在云上部署和调试你的应用)。ASP.NET又称为ASP+,不仅仅是ASP的简单升级,而是微软公司推出的新一代脚本语言。ASP.NET基于.NET Framework的Web开发平台,不但吸收了ASP以前版本的最大优点并参照Java、VB语言的开发优势加入了许多新的特色,同时也修正了以前的ASP版本的运行错误。[1-2]ASP.NET具备开发网站应用程序的一切解决方案,包括验证、缓存、状态管理、调试和部署等全部功能。在代码撰写方面特色是将页面逻辑和业务逻辑分开,它分离程序代码与显示的内容,让丰富多彩的网页更容易撰写。同时使程序代码看起来更洁净、更简单www.zgxue.com防采集请勿采集本网。

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

关于性能提升的问题,net core是否性能提升10倍?答案是还真差不多!为什么呢?这是因为.net core为了跨平台,编译的方式使用的是dotnet publish-r 版本,例如发布到windows X64的机器上,使用的命令就

首先写一个简单的接口。

这属于思路问题,在部署的时候将你的静态文件全部禁止访问,然后,使用一个专门的接口,根据条件进行读取这个静态文件,最后使用 httpResponseMessage.Content=new StreamContent(fileStream);

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

ASP.NET提供了卓越的事件驱动编程模型,让开发者简化了应用程序的总体设计,但是这个也造成了它固有的一些问题,例如,使用传统的ASP里,我们可以通过使用POST方法很容易地实现页面间传递值,

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

在gridview添加1个ImageField,4个BoundField ImageField就绑定到你图片,BoundField就设定对应到你4个数据库表里的字段,然后后台写gridview绑定事件,从数据库查询4列值绑定即可

自定义认证处理类:

Repeater不会产生重复信息啊,看你绑定的数据源是哪个了,比如只需要显示所提交的订单信息的话你就用Sellect语句,调用DATAtable对象

实现一个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自定义身份认证内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

1、CORS的原理:CORS定义一种跨域访问的机制,可以让AJAX实现跨域访问。CORS 允许一个域上的网络应用向另一个域提交跨域 AJAX 请求。实现此功能非常简单,只需由服务器发送一个响应标头即可。2、tomcat如何配置cors的跨域请求:在tomcat中,有一个和cors相关的拦截器:CORS Filter该过滤器可以通过添加必需的访问控制请求头Access-Control-*对象来进行跨域。同时还可以对一些请求进行拦截。如果请求是无效的,或者是不被允许的,该请求被拒绝或者禁止。其在web.xml文件中的基本配置如下:CorsFilterorg.apache.catalina.filters.CorsFiltercors.allowed.originscors.allowed.methodsGET,POST,HEAD,OPTIONS,PUTcors.allowed.headersContent-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Access-Control-Allow-Origincors.exposed.headersAccess-Control-Allow-Origin,Access-Control-Allow-Credentialscors.support.credentialstruecors.preflight.maxage10CorsFilterwxrefund/*3、cors.allowed.origins:允许访问资源的源列表。表示任何来源都可以访问该资源。否则,只有配置的白名单的来源可以访问该资源,其中白名单用逗号隔开,如,。4、cors.allowed.methods:允许访问的http请求方法,如GET,POST,HEAD,OPTIONS,PUT等,方法名用逗号隔开。5、cors.allowed.headers:在实际请求时可使用的请求头列表,用逗号隔开。如Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Access-Control-Allow-Origin。这些头也将返回作为访问控制的一部分内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • asp.net学习core中使用cookie身份认证方法
  • 详解在asp.net core中使用angular2以及与angular2的token base身份认证
  • 在asp.net core中实现一个token base的身份认证实例
  • 浅谈如何在asp.net core中实现一个基础的身份认证
  • c#实现支持断点续传多线程下载客户端工具类
  • asp.net使用服务器控件image/imagebutton显示本地图片的方法
  • asp.net实现postgresql快速写入/读取大量数据实例
  • 动态itemtemplate的实现(译) - item,template
  • visual studio debugger七个鲜为人知的小功能
  • asp.net mvc4中bootstrap datetimepicker控件的使用
  • 从asp.net得到microsoft word文档的代码
  • asp.net 数据类型转换类代码
  • asp.net xml文档进行添加删改操作的实例代码
  • 在web用户控件中引用样式表中样式的方法
  • 如何在ASP NET Core中实现CORS跨域
  • ASP.net core是什么,和ASP.net一样吗?
  • 请问:ASP.net mvc5和asp.net.core有什么区别呢?在今后的发展中这个前景怎么样?
  • asp.net core里面,EF和NH哪个对Oracle的支持更好?
  • asp.net core mvc 是不是未包含使用UA 动态选择displayModel
  • ASP.NET Core中如何对静态文件进行授权
  • 如何在ASP·NET中实现页面之间的传参?谢谢!
  • 在ASP.net中这个要怎么实现!
  • ASP.NET中如何实现数据绑定
  • ASP.net中怎么实现对部分页面定时刷新?
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础应用实用技巧自学过程首页asp.net实用技巧asp.net学习core中使用cookie身份认证方法详解在asp.net core中使用angular2以及与angular2的token base身份认证在asp.net core中实现一个token base的身份认证实例浅谈如何在asp.net core中实现一个基础的身份认证c#实现支持断点续传多线程下载客户端工具类asp.net使用服务器控件image/imagebutton显示本地图片的方法asp.net实现postgresql快速写入/读取大量数据实例动态itemtemplate的实现(译) - item,templatevisual studio debugger七个鲜为人知的小功能asp.net mvc4中bootstrap datetimepicker控件的使用从asp.net得到microsoft word文档的代码asp.net 数据类型转换类代码asp.net xml文档进行添加删改操作的实例代码在web用户控件中引用样式表中样式的方法java正则表达式 pattern和matche未将对象引用设置到对象的实例 (asp.net(c#)网页跳转七种方法小结未能加载文件或程序集“xxx”或它asp.net“服务器应用程序不可用”asp.net中的几种弹出框提示基本实asp.net gridview 72般绝技asp.net生成excel并导出下载五种asp.net对路径"xxxxx"asp.net汉字转拼音和获取汉字首字asp.net第一次访问慢的完美解决方案(mvcasp.net 结合yui 3.0小示例asp.net下url处理两个小工具方法解决asp.net ajax sys未定义的解决方法asp.net(c#)中给控件添加客户端js事件的方asp.net mvc 布局页、模板页使用方法详细asp.net下cookies的丢失和中文乱码asp.net 客户端浏览器缓存的http头介绍几个 asp.net 小技巧visual studio 2019使用net core3.0创建w
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved