咱们知道,http协议自己是一种无状态的协议,而这就意味着若是用户向咱们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行,由于根据http协议,咱们并不能知道是哪一个用户发出的请求,因此为了让咱们的应用能识别是哪一个用户发出的请求,咱们只能在服务器存储一份用户登陆的信息,这份登陆信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给咱们的应用,这样咱们的应用就能识别请求来自哪一个用户了。近年来RESTful API开始风靡,使用HTTP header来传递认证令牌彷佛变得理所应当,而单页应用(SPA)、先后端分离架构彷佛正在促成愈来愈多的WEB应用放弃历史悠久的cookie/session认证机制,转而使用JWT来管理用户session。本次分享课程阿笨给你们带来的是 JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。jquery
1.一、本次课程包含知识点以下:
1)、什么是JWT?
2)、JWT受权认证原理和实现思路
3)、在 ASP.NET Core 中使用 Jwt实现接口受权验证
4)、在ASP.NET Core中集成Swagger实现JWT认证
5)、关于JWT Token的疑问解答web●在jquery中怎么使用?
●服务端如何获取经过JWT验证经过的用户Id身份呢?
●Jwt Token泄露了怎么办?
●JWT Token存放在哪里?
●如何保证JWT Token的安全?
●JWT的Tokne过时了怎么办?是否有RereshToken功能?
●JWT缺点?
●什么场景选择使用JWT? 算法1.二、正确的学习课程方式须知json
1)、视频+实例源代码配套学习,一千个读者就有一千个哈姆雷特,仁者见仁智者见智!后端
2)、基础理论和实战演练相结合,切记眼高手低。(备注:须要有必定的ASP.NET Core基础)api
3)、在学习的过程当中,咱们少一点抱怨,将多一份收获。跨域
若是您在学习过程当中遇到任何的课程问题,请先私下直接找阿笨老师进行在线的沟通和交流。谢谢你们的理解和支持,预祝你们学习快乐!浏览器
1.三、本课程适合人群以下:安全
1)、有必定的ASP.NET Core开发基础。服务器
2)、学习和了解ASP.Net Core跨平台开发技术。
3)、喜欢阿笨分享的干货课程童鞋们。
1.四、一句话总结今天咱们学习达到的目标
如何简单快速上手使用基于ASP.NET Core WebAPI跨平台开发技术使用基于JWT实现接口受权验证。
若是您一样对本次分享《ASP.NET Core WebApi基于JWT实现接口受权验证》课程感兴趣的话,那么请跟着阿笨一块儿学习吧。废话很少说,直接上干货,咱们不生产干货,咱们只是干货的搬运工。
接口受权验证原理图
JWT(JSON Web Token)是一种开放标准,它以 JSON 对象的方式在各方之间安全地传输信息。通俗的说,就是经过数字签名算法生产一个字符串,而后在网络请求的中被携带到服务端进行身份认证,功能上来讲和 SessionId 认证方式很像。
通俗地来说,JWT是能表明用户身份的令牌,可使用JWT令牌在api接口中校验用户的身份以确认用户是否有访问api的权限。
JWT经常被用做保护服务端的资源(resource),客户端一般将JWT经过HTTP的Authorization header发送给服务端,服务端使用本身保存的私钥key计算、验证签名以判断该JWT是否可信。
JWT全称为json web token,说白了是什么呢?就仅仅只是一个字符串而已,Jwt 形式的 token 通常分为 3 个部分,分别是 Header,Payload,Signature,这三个部分使用 . 分隔。其中前两部分使用 Base64 编码,未经加密处理,第三个部分使用 RSA 加密。
因此一个 Jwt 看起来大概是这个样子:
header.payload.signature
Header 头
Header 部分通常用来记录加密算法跟 Token 类型
举个例子:
{"alg":"HS256","type":"JW”}
Payload 有效载荷
Payload 部分也是一个 JSON 对象,用来存放实际须要传递的数据。JWT 规定了7个官方字段,供选用。
iss (issuer):jwt的签发者/发行人;
exp (expiration time):过时时间
sub (subject):主题
aud (audience):接收方;
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):jwt惟一身份标识,能够避免重放***
除了官方字段,你还能够在这个部分定义私有字段,下面就是一个例子。
{"sub":"1234567890","name":"John Doe","admin":true}
Payload 存放的是一些不敏感的用户数据,由于这一部分仅仅只是使用 Base64 加密,因此不该该用来保存用户的密码之类的信息。
Signature 签名
3、JWT受权认证原理和实现思路这一部分是 Jwt 最重要的部分,使用 header 中记录的算法进行了加密,加密方式以下:
HMACSHA256( base64UrlEncode(header) +"."+ base64UrlEncode(payload), secret)
因此这个部分能够用来保证用户信息不被篡改,起到验证用户身份的做用。
其实我以为技术文章其实也能够不用长篇大论,重点是要能把简单的道理用深刻浅出的方式让你们快速接受。
JWT实现原理图
4、在 ASP.NET Core 中使用 Jwt实现接口受权验证1)、用户使用用户名密码来请求服务器。
2)、服务器进行验证用户的信息。
3)、服务器经过验证发送给用户一个token。
4)、客户端存储token,并在每次请求时附送上这个token值。
5)、服务端验证token值,并返回数据。
须要注意这个token必需要在每次请求时传递给服务端,它应该保存在请求头里, 另外,服务端要支持CORS(跨来源资源共享)策略,通常咱们在服务端这么作就能够了Access-Control-Allow-Origin: *。
在asp.net core的api中添加token认证是一件很是容易的事情,这要多亏了JwtBearerAuthentication这个中间件 !
由于 Jwt 自己的特色,因此用来签发 Token 的服务器能够跟应用服务器不是同一台,这样就能够搞微服务之类的东西。通常访问者须要先到受权服务器(AuthorizedServer)进行受权,成功后才能访问咱们的资源服务器(ResourceServer)
两种方式来在ASP.NET Core中来使用JWT实现接口受权验证
1)、采用自定义jwt验证明现接口受权验证
2)、ASP.NET Core框架已经集成了Jwt受权验证机制(推荐使用)
1)、在jquery中怎么使用?
2)、服务端如何获取经过JWT验证经过的用户Id身份呢?
3)、Jwt Token泄露了怎么办?
4)、JWT Token存放在哪里?
5)、如何保证JWT Token的安全?
6)、JWT的Tokne过时了怎么办?是否有RereshToken功能?
7)、JWT缺点?
8)、什么场景选择使用JWT?
7、总结JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。
OAuth 2.0,它 是目前最流行的受权机制,用来受权第三方应用,获取用户数据技术。
ASP.NET Core已经与JWT高度的集成了,相对咱们的ASP.NET MVC项目来讲使用也是比较简单的。一旦你用了ASP.NET Core,你就会不由自主地爱上ASP.NE Core!若是你们感兴趣的话,能够学习一下早期分享的《ASP.NET WebApi 基于JWT实现Token签名认证》课程,该课程就是采用自定义Token来实现接口身份认证以及包含了RereshToken功能。