Flask实现JWT验证方式,令牌刷新

本文介绍了在前后端分离模式下,使用Flask实现JWT验证的方式,以解决跨域问题。讨论了JWT的三段式结构,并详细阐述了校验Token的过程,包括数据加密解密以及如何确保Token的有效性。同时提到了可以使用的第三方库如itsdangerous、flask_jwt_extended和pyjwt。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前后端分离模式

Flask Web验证方式(尝试过的):

  • cookie

    cookie跨域是个比较麻烦的问题

    # 在manage.py实例app后,加上钩子函数
    @app.after_request
    def after_request(res):
        resp = make_response(res)
        res.headers['Access-Control-Allow-Origin'] = request.origin
        res.headers["Access-Control-Allow-Headers"] = "Content-Type"
        res.headers['Access-Control-Allow-Credentials'] = 'true'
        res.headers['Access-Control-Allow-Methods'] = "GET,POST,PUT,DELETE,OPTIONS"
        res.headers['Cache-Control'] = 'no-store'
        return resp
    
    """
    在每次请求结束,设置响应头,如果前端和后端在同一台服务器上,这样子可以解决。
    如果前端的服务和后端服务不在同一台电脑,跨域问题会继续出现(没有深入)
    """
    
  • session

    加密版的cookie,而且移动端支持不好,一般存放在redis中

  • token

    解决跨域

    设置密文,保存于服务端。请求携带

  • JWT

    JSON Web Token

    主要使用算法实现,不用保存在服务端,解决跨域问题,

    三段字符串 格式: str1.str2.str3

    生成Token

    • 第一段字符串:固定格式 {“alg”:“HS256”, “typ”:“JWT”},转换为字符串,使用base64url加密

    • 第二段字符串:存放数据及过期时间{data":“data”, “exp”:“过期时间”},转换为字符串,使用base64url加密

    • 第三段字符串:

      • 第一段和第二段拼接起来
      • 然后使用HS256加密 (加盐)
      • 然后再对上一步结果进行base64url加密

    校验Token:

    前端请求携带token,后端对token校验

    • 获取Token,对Token进行切割
    • 对第二段进行解密,获取data信息,校验(是否过期等)
    • 将第一段和第二段进行HS256加密(加盐),判断是否和第三段相等

第三方库

  • itsdangersous
  • flask_jwt_extended
  • jwt
  • pyjwt

代码实现

基于itsdangersous实现

token及refresh_token

token_.py

import itsdangerous

SALT = "gogo"
SALT2 = "ogogosahfjbkbfskabk"

t = itsdangerous.TimedJSONWebSignatureSerializer(SALT, expires_in=120)
t2 = itsdangerous.TimedJSONWebSignatureSerializer(SALT2, expires_in=2592000)  # 默认一个月

# 生成access_token
def gen_token_(info: dict
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值