您的位置:首页 > 编程语言 > ASP

asp.net core 2.0 web api基于JWT自定义策略授权

2017-09-17 08:35 1411 查看
JWT(json web token)是一种基于json的身份验证机制,流程如下:



通过登录,来获取Token,再在之后每次请求的Header中追加Authorization为Token的凭据,服务端验证通过即可能获取想要访问的资源。关于JWT的技术,可参考网络上文章,这里不作详细说明,
这篇博文,主要说明在asp.net core 2.0中,基于jwt的web api的权限设置,即在asp.net core中怎么用JWT,再次就是不同用户或角色因为权限问题,即使援用Token,也不能访问不该访问的资源。
基本思路是我们自定义一个策略,来验证用户,和验证用户授权,PermissionRequirement是验证传输授权的参数。在Startup的ConfigureServices注入验证(Authentication),授权(Authorization),和JWT(JwtBearer)
自定义策略:
已封闭成AuthorizeRolicy.JWT nuget包,并发布到nuget上: https://www.nuget.org/packages/AuthorizePolicy.JWT/ 源码如下:
JwtToken.cs
  
Permission.cs
  PermissionRequirement.cs
 自定义策略类PermissionHandler.cs
  
新建asp.net core 2.0的web api项目,并在项目添加AuthorizePolicy.JWT如图



先设置配置文件,用户可以定义密匙和发生人,订阅人
"Audience": {
"Secret": "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",
"Issuer": "gsw",
"Audience": "everone"
}
在ConfigureServices中注入验证(Authentication),授权(Authorization),和JWT(JwtBearer)
Startup.cs
  
在需要授的Controller上添加授权特性
[Authorize("Permission")]

PermissionController类有两个方法,一个是登录,验证用户名和密码是否正确,如果正确就发放Token,如果失败,验证失败,别一个成功登后的无权限导航action。
  
下面定义一个控制台(.NetFramewrok)程序,用RestSharp来访问我们定义的web api,其中1为admin角色登录,2为system角色登录,3为错误用户密码登录,4是一个查询功能,在startup.cs中,admin角色是具有查询/api/values的权限的,所以用admin登录是能正常访问的,用system登录,能成功登录,但没有权限访问/api/values,用户名密码错误,访问/aip/values,直接是没有授权的
  
运行结果:



源码:https://github.com/axzxs2001/AuthorizePolicy.JWT
原文地址:http://www.cnblogs.com/axzxs2001/p/7530929.html

.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: