JwtToken生成及认证过程

什么是JWT

要了解jwt的生成及验证,首先要了解什么是jwt。jwt是json web token的缩写,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,该token被设计紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。jwt的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其他业务逻辑所必需的声明信息,该token也可以直接被用于认证,也可以被加密。

JWT

jwt是由三段信息通过点号拼接而成,例如:

JWT的生成

jwt由三部分组成,第一部分header,第二部分payload,第三部分(signature)由第一部分和第二部分通过点号连接,然后使用HS256算法进行哈希加密,然后base64编码

第一部分header里面一般有类型和加密的算法等信息;第二部分payload一般存储像用户名、手机号、过期时间等一些不敏感信息,也可自行扩充。这两部分用的都是base64编码,因为可以被其他人base64解密,所以不建议存储敏感信息;第三部分相比于前两部分要安全些,因为哈希加密是单向不可逆的

代码部分

import jwt
from flask import current_app

# 生成token
def generate_token(payload,expiry):
    # 组织payload
    _payload = {
        'exp':expiry   # 有效期
    }
    _payload.update(payload)
    # 读取配置文件中的secret_key
    _key = current_app.config.get("SECRET_KEY")
    # 生成token
    token = jwt.encode(payload=_payload,key=_key)
    return token

SECRET_KEY中配置的变量是通用密钥, 主要在加密的过程中作为算法的一个参数,这个值的简易程度影响着数据传输和存储时的简易程度,考虑到安全性,SECRET_KEY最好存储在系统的环境变量中

_payload.update(payload)更新payload,在token更新时使用

JWT的认证

当服务器接收到一个JwtToken的时候,首先要对这个JwtToken的完整性进行验证,这个就是签名认证。将token字符串从右边开始以"."进行一次分割,得到签名输入部分(header+payload), 对签名输入部分进行哈希加密(使用header中声明的算法),然后base64编码,将编码结果中的"="替换为" ",然后与签名进行对比,如果一致说明认证成功,不一致说明认证失败。

代码部分

import jwt
from flask import current_app,jsonify

# 校验token
def verify_token(token):
    # 读取配置文件中的secrey_key
    _key = current_app.config.get("SECRET_KEY")
    try:
        payload = jwt.decode(token,key=_key,algorithms=['HS256'])
        return payload
    except Exception as e:
        print("失败原因>>",e)
        return jsonify(msg="验证失败",code=401)

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值