一.jwt token 前后端的逻辑

摘要

jwt token 前后端的交互逻辑,此部分只描述了一些交互逻辑,不涉及到真实应用的开发。

token的格式

token=header+'.'+payload+'.'+sign

第一次登陆的时候

  1. 判断http请求头中是否包含Authorization
  2. 不包含则提示用户未登录
  3. 当用户登录后,后端生成token返回给前端,生成token逻辑如下
  1. 生成header
    header = {
    "alg": "DES",
    "typ": "JWT"
    }
    header_str_64 = base64.encode(header_str)
  2. 生成payload
    payload = {
    "user_id":"xx",
    "effective_time":"过期时间"
    }
    payload_str_64 = base64.encode(header_str)
  3. 对payload_str_64进行AES加密生成签名
    sign=generateSign(payload_str_64)
  4. 生成token
    token=header_str_64 + '.' + payload_str_64 + '.' + sign

后端token校验

  1. 获取Authorization 中的token

  2. 解密进行签名验证

    python 复制代码
    header_str_64 ,payload_str_64 ,sign=token.split(',')
    #根据请求头中的payload_str_64反向生成签名
    #生成的签名和token携带的签名进行比对
    #相等则信息检验成功,不相等则表示信息被篡改
    sign_now=generateSign(payload_str_64)
    if sign_new==sign:
    	print("信息校验通过")
        payload_str = base64.decode(payload_str_64)
        payload = json.loads(payload_str)	
    	payload['effective_time'] = str(app_obj.expire_time)
    	if '当前时间' > effective_time:
    		data = {
    	             'status_code': 401,
    	             'message': 'authorization已过期,请找管理员续时长'
    	           }        	
    else:
    	return '信息被篡改'

如何进行token自动续时

前面 伪代码 我们的token设计中加入了 effective_time过期时间,在进行用户校验的时候如果token过期了则返回给用户 'authorization已过期,请找管理员续时长',这样做是有缺点的,比如我正在操作一个任务,刚创建好还未保存token过期了,是不是很尴尬,因此实现token自动续时长是很有必要的。就是当用户处于活跃状态的时候实现token自动续时长。

  1. 前端将登陆后获取到的token缓存到本地
  2. 每个五分钟检查下token的effective_time时间
  3. 如果过期了则调用后端接口,后端接口会返回新的token
  4. 前端更新本地缓存,替换旧的token
相关推荐
2401_857622666 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_857589366 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
哎呦没8 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch8 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
杨哥带你写代码9 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
AskHarries10 小时前
读《show your work》的一点感悟
后端
A尘埃10 小时前
SpringBoot的数据访问
java·spring boot·后端
yang-230710 小时前
端口冲突的解决方案以及SpringBoot自动检测可用端口demo
java·spring boot·后端
Marst Code10 小时前
(Django)初步使用
后端·python·django
代码之光_198010 小时前
SpringBoot校园资料分享平台:设计与实现
java·spring boot·后端