当前位置: 首页 > 科技观察

谈谈NET对JWT的理解

时间:2023-03-20 22:43:23 科技观察

开篇本文内容是参考了很多大佬的文章写的。简介jwt是一种基于JSON的令牌,用于在网络上声明某些声明。jwt通常由三部分组成:头部信息、消息体、签名。它是用于在两方之间传递安全信息的声明性声明规范。主要用于集群分发。作用:可用于权限验证,是一种标准化的数据传输规范,但不用于数据加密和保护。使用场景授权:用于授权而不是认证。通过身份验证,我们验证用户的用户名和密码是否有效,并将用户登录到系统中,通过授权,我们验证发送到服务器的请求属于经过身份验证的登录用户,以便用户可以被授予访问系统权限,然后批准用户使用获得的令牌访问路由、服务和资源。信息交换:JSON网络令牌是在两方之间安全传输信息的好方法。因为可以对jwts进行签名,这使您能够确保发件人是他们声称的人,并且由于签名是使用标头和有效负载计算的,它还使您能够验证发送的内容是否未被篡改。与token+redisJWT相比,就是JsonWebToken,这是一种典型的Token方式。JWT和Token+Redis的区别其实就是Token,但是JWT的可靠性保证来自于加密算法(对称加密和非对称加密),而Token+Redis的方案依赖于后台的数据存储。这两个本质也带来了使用上的差异:1.JWT是去中心化的,不需要任何后台数据共享。第三方认证、跨数据中心认证、微服务等都适合使用JWT。当然,因为是去中心化的,不是实时验证,所以基本上不可能主动让token过期(如果做了,就违背了初衷)2Token+Redis是中心化的,必须能识别token访问Redis,除非有特殊需要实时检测每一个token,否则选择JWT。毕竟是成熟通用的技术,传播和维护成本低,对开发者也比较友好。至此,我忘了是哪位大佬的文章摘录了,所以很抱歉没有给出参考地址。Process用户通过登录向服务系统发起请求,然后生成带有一定用户信息的数据作为token(jwt)返回给用户。用户在请求接口时获取返回信息放在header中,服务系统会从头开始。部门获得token后,验证签名的有效性,并向客户端做出相应的响应。Authorization:Bearer如果想获取接口中的jwttoken,可以使用vartokenHeader=HttpContext.Request.Headers["Authorization"].ToString().Replace("Bearer","");现在感觉可以通过jwt实现权限,在系统中定义哪些权限,然后在方法头中设置哪些角色可以访问这个东西。如果存token的话,我的思路是把用户的信息放在jwt里面,然后前端通过登录获取这个东西,然后我把这个东西返回给前台,每次接口的时候把这个东西传出去调用,然后我通过这个解密得到我登录时保存的信息。然后做我自己的事情。注意:生成jwt时的key必须大于16位,否则会因为长度不够而抛出异常。jwt本身没有加密,里面包含的信息任何人都可以读取。jwt的签名部分是前两部分的签名,防止数据被篡改。Bearer认证Bearer认证(也叫token认证)是一种HTTP认证方案,其中包含的安全令牌称为BearerToken。因此,Bearer认证的核心是Token。如何保证Token的安全是重中之重。一种方式是使用HTTPS,另一种方式是对Token进行加密签名。JWT是一种流行的Token编码方式。Verification//全局增加配置services.AddControllers((options)=>{options.Filters.Add(newAuthorizeFilter());//增加全局Authorize});//Controller或方法增加配置[Authorize]原理获取token步骤1:切割tokenStep2:解码第二段,获取payload,检查token是否超时Step3:拼接前两段再次进行HS256加密,将加密后的密文与第三段进行比较。如果相等则认证通过参考文档小陈:https://www.cnblogs.com/stulzq/p/7417548.html老张的哲学:https://www.cnblogs.com/laozhang-is-phi/类别/1413402.html