.net core jwt 身份验证初步了解1

JWT全称Json Web Token

jwt是用于身份验证的开放标准,是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token,它可以在网络之间传递信息,jwt是由三个部分组成:头部,载荷,签名。头部包含了令牌的类型和加密算法,载荷包含了用户的信息,签名是对头部和载荷的加密结果。

JWT 本质上就是一组字串,通过(.)切分成三个为 Base64 编码的部分:

Header : 描述 JWT 的元数据,定义了生成签名的算法以及 Token 的类型。

Payload : 用来存放实际需要传递的数据

Signature(签名) :服务器通过 Payload、Header 和一个密钥(Secret)使用 Header 里面指定的签名算法(默认是 HMAC SHA256)生成。

jwt鉴权验证是指在用户登录成功之后服务器生成一个jwt令牌并返回给客户端,从而客户端在后续的请求中携带该令牌,服务通过令牌的签名来确定用户的身份和权限。这种方式可以避免在每个请求中都需要进行身份验证,提高了系统的性能和安全性。

jwt的优点:

无状态:jwt令牌包含了所有必要的信息,服务器不需要再每个请求中都进行身份验证,避免了服务器存储会话信息的开销。

可扩展性:jwt令牌可以包含任意的信息,可以根据需要添加自定义的字段。

安全性:jwt令牌使用签名来保证数据的完整性和真实性,防止数据被篡改或伪造。

跨平台:jwt令牌是基于json格式的,可以再不同的变成语言和平台之间进行传递和解析。

JWT的缺点:

安全性:由于jwt的payload是使用base64编码的,并没有加密,因此jwt中不能存储敏感数据。而session的信息是存在服务端的,相对来说更安全。

性能:jwt太长。由于是无状态使用JWT,所有的数据都被放到JWT里,如果还要进行一些数据交换,那载荷会更大,经过编码之后导致jwt非常长,cookie的限制大小一般是4k,cookie很可能放不下,所以jwt一般放在local storage里面。并且用户在系统中的每一次http请求都会把jwt携带在Header里面,http请求的Header可能比Body还要大。而sessionId只是很短的一个字符串,因此使用jwt的http请求比使用session的开销大得多。

相关推荐
编程乐趣3 天前
基于.Net Core开发的GraphQL开源项目
后端·.netcore·graphql
吾门3 天前
机器视觉开发教程——C#如何封装海康工业相机SDK调用OpenCV/YOLO/VisionPro/Halcon算法
图像处理·opencv·计算机视觉·c#·.net·.netcore·visual studio
Kookoos5 天前
ABP vNext + EF Core 实战性能调优指南
数据库·后端·c#·.net·.netcore
[email protected]5 天前
ASP.NET Core 中实现 Markdown 渲染中间件
后端·中间件·asp.net·.netcore
吃瓜日常6 天前
ABP项目发布到IIS流程
c#·.netcore
[email protected]8 天前
ASP.NET Core 中间件
后端·中间件·asp.net·.netcore
[email protected]9 天前
ASP.NET Core 请求限速的ActionFilter
后端·asp.net·.netcore
菜鸟分享录9 天前
使用 Semantic Kernel 快速对接国产大模型实战指南(DeepSeek/Qwen/GLM)
microsoft·.netcore·semantic kernel
观无10 天前
Ocelot\Consul\.NetCore的微服务应用案例
.netcore·consul
观无10 天前
Nginx发布Vue(ElementPlus),与.NETCore对接(腾讯云)
vue.js·nginx·.netcore