JWT和token的区别及优缺点

JWT和token的区别及优缺点

TOKEN

概念: 令牌, 是访问资源的凭证。

1、Token的认证流程:

  1. 用户输入用户名和密码,发送给服务器。

  1. 服务器验证用户名和密码,正确的话就返回给客户端一个签名过的token。

  2. 浏览器客户端拿到这个token,存储到cookie或者localStorage中。

  3. 客户端后续每次请求中,会在 header中携带token发送给服务器。

  4. 服务器器验证token并解析出用户ID等相关信息,通过调取数据库信息比对,如果有效那么认证就成功,可以返回客户端需要的数据,无效则返回错误信息引导客户端跳转到登陆页面。

2、Token的优点:

1.可以隐藏真实数据

2.适用于分布式或微服务

3.安全系数高

3、Token缺点:

1、需要解析后,调用数据库比对来验证,浪费服务器资源

2、内存级别重启全部失效

3、时效性,无法失效,被非法获取后可以一直使用

4、集群部署,多台服务器无法共享,负载会导致用户状态不同步

JWT

1、概念:

JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。

2、组成:

WT包含三个部分: Header头部,Payload负载和Signature签名。由三部分生成token,三部分之间用“.”号做分割。 列如 :

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

  1. Header

    在Header中通常包含了两部分:

    1. type:代表token的类型,这里使用的是JWT类型。

    2. alg:使用的Hash算法,例如HMAC SHA256或RSA.

    例如:

    { "alg": "HS256", "typ": "JWT" } 这会被经过base64Url编码形成第一部分

  1. Payload

    token的第二个部分是荷载信息,它包含一些声明Claim(实体的描述,通常是一个User信息,还包括一些其他的元数据) 声明分三类:

    (1)Reserved Claims,这是一套预定义的声明,并不是必须的,这是一套易于使用、操作性强的声明。包括:iss(issuer)、exp(expiration time)、sub(subject)、aud(audience)等

    (2)Plubic Claims, 公共的声明

    (3)Private Claims,私有的声明,即交换信息的双方自定义的声明

    例如:

    { "sub": "1234567890", "name": "John Doe", "admin": true } 同样经过Base64Url编码后形成第二部分

  1. signature

    是一个签证信息。使用header中指定的算法将编码后的header、编码后的payload、一个secret进行加密。 例如:

    使用的是HMAC SHA256算法,大致流程类似于:

    HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

    这个signature字段被用来确认JWT信息的发送者是谁,并保证信息没有被修改 。

这三部分连接成一个完整的字符串,构成了最终的jwt

例如下面这个例子:

现在有一个接口/viptest只能是vip用户访问,我们看看服务端如何根据Token判断用户是否有效。

普通token版:

  1. 查库判断是否过期

  1. 查库判断时候是VIP

JWT 版本:

假如payload部分如下:

{

"exp": 1518624000,

"isVip": true,

"uid":1

}

  1. 解析JWT

  1. 判断签名是否正确,根据生成签名时使用的密钥和加密算法,只要这一步过了就说明是payload是可信的

  1. 判断JWT token是否过期,根据exp,判断是否是VIP,根据isVip

从以上不难看出:JWT版是没有查库的,他所需要的基础信息可以直接放到JWT里,服务端只要判断签名是否正确就可以判断出该用户是否可以访问该接口,当然JWT里的内容也不是无限多的,其他更多的信息我们就可以通过id去查数据库

3、优点:

1.无需服务器端存放数据,减轻服务器端的压力

2.占用带宽比较小、跨语言

3.token自身包含用户信息且无法篡改,在服务(网关)中可以自行解析校验出用户信息,对认证服务器(account-svc)压力小

4、缺点:

1.建议不要放铭感数据 userid、手机号码(如果非要放userId,deptId等信息,可采用rsa256算法加密)RSA256生成Jwt

2.Jwt生成之后无法修改(发生变化)

3.后端无法统计 生成jwt

4.无法吊销令牌,只能等待令牌自身过期

5.令牌长度与其包含用户信息多少正相关,传输开销较大

6.Jwt是无状态的,如果别人获取到了,别人也能用

结论:

对于使用token还是jwt,就要针对具体使用情况而定,最为科学。觉得我个人总结不错的话,可以添加收藏哦!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JWT(JSON Web Token)和 CSRF token(Cross-Site Request Forgery token)都是常见的安全机制,但它们的作用有所不同。 - JWT 主要用于认证和授权,它是一种基于 JSON 的开放标准,用于在客户端和服务器之间传递安全声明。JWT 通常包含用户身份信息、访问权限等信息,用于验证用户身份和控制用户权限,从而保证数据的安全性和完整性。 - CSRF token 主要用于防止跨站点请求伪造攻击,它是一种随机生成的 token,用于验证用户提交的请求是否合法。CSRF token 通常存储在用户的会话中,当用户提交表单或发出请求时,服务器会将 token 作为隐藏表单字段或请求头信息返回给客户端,客户端再将其作为表单提交或请求头信息一起发送到服务器端进行验证。 它们的优缺点如下: - JWT 的优点是可以在多个应用程序之间共享,由于 JWT 包含了用户身份信息和访问权限等信息,因此可以减少对服务器的重复查询和验证,提高应用程序的性能。但是,如果 JWT 被劫持或篡改,那么攻击者就可以冒充用户进行访问,造成安全风险。 - CSRF token 的优点是可以有效防止跨站点请求伪造攻击,保证用户提交的请求都是合法的,从而保护用户的安全。但是,CSRF token 需要将 token 存储在用户的会话中,如果会话被劫持或泄露,那么攻击者就可以使用该 token 进行攻击,造成安全风险。 综上所述,JWT 和 CSRF token 都是常见的安全机制,应用场景不同,具有各自的优缺点。在实际开发中,应根据具体场景选择合适的安全机制,以保证应用程序的安全性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值