JWT由3部分组成:标头(Header)、有效载荷(Payload)和签名(Signature)。在传输的时候,会将JWT的3部分分别进行Base64编码后用 . 进行连接, 形成最终传输的字符串。

通俗地说,JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输。

JWT就是上述流程当中token的一种具体实现方式,其全称是JSON Web Token,官网地址:https://jwt.io/。

此篇是通过Python3实现JWT的使用。这个方法调研了官方的JWT模块,实现了一个自己的jwt模块,有效的去掉了header,并且给其增加了一个默认的过期时间,解析时也有效地去掉指定的加密算法。

供参考:

"""
python 实现jwt
"""
import time
import json
import copy
import base64
import hmacclass Jwt:def __init__(self):pass@staticmethoddef base64_encode(string):"""功能函数: base64编码:param string: 预编码字符串:return: 编码后的结果(字节串)"""return base64.urlsafe_b64encode(string.encode()).replace(b'=', b'')@staticmethoddef base64_decode(b64_string):"""功能函数:base64解码:param b64_string: 需要解码的base64字符串:return: 解码后的结果(字符串)"""result = len(b64_string)%4if result != 0:b64_string += "="*(4-result)return base64.urlsafe_b64decode(b64_string.encode()).decode()@staticmethoddef make_token(payload,key,expire=300):"""生成token"""header={"alg":"HS256","typ":"JWT"}header = json.dumps(header,separators=(",",":"),sort_keys=True)part1 = Jwt.base64_encode(header)payload_dict = copy.deepcopy(payload)payload_dict["exp"] = time.time() + expirepayload_dict = json.dumps(payload_dict,separators=(",", ":"),sort_keys=True)part2 = Jwt.base64_encode(payload_dict)part1_2 = part1 + b'.' +part2sign = hmac.new(key.encode(),part1_2,digestmod="SHA256").hexdigest()sign = Jwt.base64_encode(sign)return (part1_2 + b'.' + sign).decode()@staticmethoddef check_token(token,key):"""校验token"""part1,part2,user_part3 = token.split(".")sign = hmac.new(key.encode(),(part1+"."+part2).encode(),digestmod="SHA256").hexdigest()server_part3 = Jwt.base64_encode(sign).decode()if server_part3 != user_part3:raiseprint("token合法")part2_dict = Jwt.base64_decode(part2)part2_dict = json.loads(part2_dict)exp = part2_dict["exp"]now = time.time()if now > exp:raisereturn part2_dictif __name__ == '__main__':token= Jwt.make_token(payload={"username":"liying"},key='1234567',expire=10)print(f'token是:{token}')print(Jwt.check_token(token,"1234567"))

Python3 实现 JWT相关推荐

  1. ctf.show的JWT(web345-web350)

    web345 什么是jwt jwt是一个开放标准,它定义的一种紧凑的 自包含的方式,用于所谓json对象在各方之间安全的传输信息.该信息可以被验证和信任,因为它是数字签名的. 使用场景 一次性验证 比 ...

  2. 浅析JWT Attack

    前言 在2022祥云杯时遇到有关JWT的题,当时没有思路,对JWT进行学习后来对此进行简单总结,希望能对正在学习JWT的师傅们有所帮助. JWT JWT,即JSON WEB TOKEN,它是一种用于通 ...

  3. k8s之 service account token

    在前一篇笔记中我们验证了使用sa的token作为一种认证,向apiserver发送请求,这里简述下它的认证原理和流程. 首先得知道这种token称为JWT(json web token),可以参考官网 ...

  4. python3 jwt 模拟登录

    pip install jwt """ python 实现jwt """ import time import json import co ...

  5. Python 生成 JWT(json web token) 及 解析方式

    一.关于 jwt 的原理及概念可以自行在网络上搜索了解一下,这里推荐一篇写的比较好的博客 深入了解Json Web Token之概念篇 另附 JWT 的官方文档: https://jwt.io/int ...

  6. 《Python3网络爬虫开发实战(第二版)》上市了!!!!

    " 阅读本文大概需要 5 分钟. " 告诉大家一个好消息:我的好朋友崔庆才老师的<Python3网络爬虫开发实战(第二版)>现在正式上市了!!!! 没错,就是这本: 就 ...

  7. python3 接入IOS推送apn

    官方文档地址:ios notification 推送截图步骤: 推送接入方法苹果给出了两种: certificate 证书接入 token 接入 token 接入方法 根据文档给出的签名规则获取签名t ...

  8. 修复python3.6.13+django2.2+djangorestframework 3.12.4 使用djangorestframework_simplejwt-4.4.0-py3时的两个bug

    修复python3.6.13+django2.2+djangorestframework 3.12.4 使用djangorestframework_simplejwt-4.4.0-py3时,产生的两个 ...

  9. 《Python3网络爬虫开发实战(第二版)》内容介绍

    这是「进击的Coder」的第 505 篇分享 作者:崔庆才 大家好,本节首先来预告下即将出版的<Python3网络爬虫开发实战(第二版)>的主要内容. 由于我已经把书的总体的内容介绍写在了 ...

最新文章

  1. LeetCode 673. Number of Longest Increasing Subsequence--O(N log N )--Java,C++,Python解法
  2. import csv into iaddressbook
  3. 声明及赋值_重述《Effective C++》二——构造、析构、赋值运算
  4. ASP.NET HTTP运行时组成详解(转贴)
  5. 计算机重启如何进入设置界面,win7电脑无法正常启动,一开机就进入到bios设置界面怎么办?...
  6. Array的sort方法
  7. c语言编程常见问题解答,C语言编程常见问题解答之常用函数的包含文件
  8. Spring MVC防御CSRF、XSS和SQL注入攻击
  9. glob-parent Regular expression denial ofservice
  10. 迎建国七十周年,Linux厂商巡礼之一铭软件
  11. 五笔字根表识别码图_五笔字根表图
  12. 【黑苹果教程】说点闲话
  13. VueX浏览器刷新如何保存数据
  14. Android短信息验证码自动填写详细介绍
  15. conda search cuda后没有版本10的问题
  16. java数组找出重复元素及次数_Java查找数组重复元素,并打印重复元素、重复次数、重复元素位置...
  17. openjudge-noi-2.6-1775:采药
  18. python 在指定位置显示图片并调整窗口大小(或图片大小)
  19. 怎么用IDEA上传本地项目到码云/Github?
  20. 手机点餐系统概述_点餐管理系统测试.概要.docx

热门文章

  1. linux云转码视频系统,express-ffmpeg
  2. python写透视挂_python:Python实现数据的透视表
  3. c语言红外发射编码,单片机红外二极管编码发射程序+原理图
  4. ZOJ 1973 Just Pour the Water(矩阵快速幂)
  5. 现代信号处理-现代功率谱密度估计AR模型
  6. 【Linux】循序渐进学运维-服务篇-nginx入门
  7. OKEX账号注册步骤
  8. bandicom录屏音画不同步_bendicam新人求助!音画不同步!
  9. C#制作高仿360安全卫士窗体(三)
  10. 没有磁盘计算机无法运行,网吧的电脑大多数都没有硬盘,那电脑怎么运行