Token和JWT的相同点和区别

相同点

  1. 都是访问资源的令牌
  2. 均可以记录用户信息
  3. Token和JWT都是无状态的,服务器不需要在后续请求中存储任何会话信息。每个请求都包含必要的信息来验证用户身份和权限
  4. 都是只有验证成功后才能访问服务端上受保护的资源

区别

  • Token:服务端验证客户端发送过来的 Token 时,还需要查询数据库获取用户信息,然后验证 Token 是否有效
  • JWT:将 Token 和 Payload 加密后存储于客户端,服务端只需要使用密钥解密进行校验(校验也是 JWT 自己实现的)即可,不需要查询或者减少查询数据库,因为 JWT 自包含了用户信息和加密的数据

Token

概念:
令牌, 是访问资源的凭证
Token的认证流程:

  1. 把用户的用户名和密码发到后端
  2. 后端进行校验,校验成功会生成token, 把token发送给客户端
  3. 客户端本身保存token, 再次请求就要在Http协议的请求头中带着token去访问服务端,和在服务端保存的token信息进行比对校验。

特色:
这种方式的特点就是客户端的token中自己保留有大量信息,服务器没有存储这些信息


JWT

概念:
JSON WEB TOKEN 的简写,jwt是token的一种实现方式,它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证,能够使用在RESTFUL接口定义, 也能够使用在普通的web中使用

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

  1. Header 在Header中通常包含了两部分:type:代表token的类型,这里使用的是JWT类型。alg:使用的Hash算法,例如HMAC SHA256或RSA. { "alg": "HS256", "typ": "JWT" } 这会被经过base64Url编码形成第一部分
  2. 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编码后形成第二部分
  3. signature 使用header中指定的算法将编码后的header、编码后的payload、一个secret进行加密。例如使用的是HMAC SHA256算法,大致流程类似于: HMACSHA256( base64UrlEncode(header) +"." + base64UrlEncode(payload), secret)这个signature字段被用来确认JWT信息的发送者是谁,并保证信息没有被修改 。

验证流程:

  1. 在头部信息中声明加密算法和常量, 而后把header使用json转化为字符串
  2. 在载荷中声明用户信息,同时还有一些其余的内容;再次使用json 把载荷部分进行转化,转化为字符串
  3. 使用在header中声明的加密算法和每一个项目随机生成的secret来进行加密, 把第一步分字符串和第二部分的字符串进行加密, 生成新的字符串。词字符串是独一无二的。
  4. 解密的时候,只要客户端带着JWT来发起请求,服务端就直接使用secret进行解密。

特色:

  1. 三部分组成,每一部分都进行字符串的转化
  2. 解密的时候没有使用数据库,仅仅使用的是secret进行解密。
  3. JWT的secret千万不能泄密!!!
Last modification:November 13, 2024
如果觉得我的文章对你有用,您可以给博主买一杯果汁,谢谢!