基于jwt token验证

什么是jwt:

JWT全称是JSON WEB TOKEN,是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于在多方之间安全地传输JSON格式的信息。JWT主要由三部分组成:头部(Header)、负载(Payload)、签名(Signature),每部分之间以点(.)分隔。

头部(Header):这部分包含令牌类型和所使用的算法。

{
  "alg": "HS256",    # 算法
  "typ": "JWT"       # 类型
}

载荷(Payload):这部分包含用户信息和其他元数据。

{
  "id": "123",
  "name": "张三",
  "exp": 1516239022    #超时时间
}

签名(Signature):这部分是对头部和载荷进行加密签名以验证其完整性和真实性的部分。

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

传统token和jwt比较:

基于传统token认证:用户登录后服务器返回生成token,并将token保存在服务器或数据库内,当用户再次访问时,需在请求内容里携带token,服务器获取token后,再去数据库中对token进行校验。

jwt:用户登录后服务器给用户返回一个token(服务器不保存),当用户再次访问时,需在请求内容里携带token,服务器获取token后,再做token的校验。

优势:相较于传统token而言,jwt生成的token不需要再服务端保存token。

jwt实现过程:

加密

用户提交用户名和密码给服务器,如果认证成功就生成token,再返回给客户端。

jwt生成的token是由三段字符串组成,并且用 连接起来。

第一段是头部(Header)信息,内部包含算法、token类型。json转化成字符串,然后做 base64url 加密。例:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

第二段是载荷(Payload)信息,用户自定义值、过期时间,json转化成字符串,然后做 base64url 加密。

例:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG

你可能感兴趣的:(安全,django,mysql)