Token和JWT的区别

       服务端验证客户端发送的token信息要进行数据的查询操作Jwt验证客户端发来的token就不用,在服务端使用密钥校验就可以,不用数据库的查询。

  Token需要查库验证token 是否有效,而JWT不用查库或者少查库,直接在服务端进行校验,并且不用查库。因为用户的信息及加密信息在第二部分payload和第三部分签证中已经生成,只要在服务端进行校验就行,并且校验也是JWT自己实现的。

  TOKEN:令牌是访问资源的凭证

Token的认证流程:

  • 用户输入用户名和密码,发送给服务器。
  • 服务器验证用户名和密码,正确的话就返回一个签名过的token,浏览器客户端拿到这个token
  • 客户端自己保存token,后续每次请求中,浏览器会把token作为http header发送给服务器,服务器验证签名是否有效,如果有效那么认证就成功,可以返回客户端需要的数据。

JWT

  概念:JWT是json web token缩写。使用RESTFUL接口定义,使用在普通的web。将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。

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

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

验证流程:

  • 在头部信息中声明加密算法和常量,然后把header使用json转化为字符串
  • 在载荷中声明用户信息,同时还有一些其他的内容,再次使用json把在和部分进行转化,转化为字符串
  • 使用在header中声明的加密算法来进行加密,把第一部分字符串和第二部分的字符串结合和每个项目随机生成的secret字符串进行加密,生成新的字符串,此字符串是独一无二的
  • 解密的时候,只要客户端带着jwt来发起请求,服务端就直接使用secret进行解密,解签证解出第一部分和第二部分,然后比对第二部分的信息和客户端穿过来的信息是否一致。如果一致验证成功,否则验证失败。

 

  

 

posted on 2022-06-13 11:39  溪水静幽  阅读(1209)  评论(0编辑  收藏  举报