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 SHA256
或RSA
.{ “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
进行解密,解签证解出第一部分和第二部分,然后比对第二部分的信息和客户端穿过来的信息是否一致。如果一致验证成功,否则验证失败。
立志如山 静心求实