PyJWT 使用
最近要用 Falsk 开发一个大点的后端,为了安全考虑,弃用传统的Cookie验证。转用JWT。
其实 Falsk 有一个 Falsk-JWT 但是我觉得封装的太高,还是喜欢通用的 PyJWT 。
JWT官网
https://jwt.io/
安装
pip install PyJWT
项目文档(英文)
https://pyjwt.readthedocs.io/en/latest/
Demo
import jwt
import datetime dic = {
'exp': datetime.datetime.now() + datetime.timedelta(days=), # 过期时间
'iat': datetime.datetime.now(), # 开始时间
'iss': 'lianzong', # 签名
'data': { # 内容,一般存放该用户id和开始时间
'a': ,
'b': ,
},
} s = jwt.encode(dic, 'secret', algorithm='HS256') # 加密生成字符串
print(s)
s = jwt.decode(s, 'secret', issuer='lianzong', algorithms=['HS256']) # 解密,校验签名
print(s)
print(type(s))
结果
b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NDUzMDI5OTIsImlhdCI6MTU0NTIxNjU5MiwiaXNzIjoibGlhbnpvbmciLCJkYXRhIjp7ImEiOjEsImIiOjJ9fQ.pSq-XRcC-E7zeg3u0X6TsKdhhsCPh3tB40_YJNho8CY'
{'exp': , 'iat': , 'iss': 'lianzong', 'data': {'a': , 'b': }}
<class 'dict'>
解析
首先我们注意dic的结构
dic 有官方指定的key,程序在解密的时候会根据key的Value判断是否合法。这些key有
- “exp”: 过期时间
- “nbf”: 表示当前时间在nbf里的时间之前,则Token不被接受
- “iss”: token签发者
- “aud”: 接收者
- “iat”: 发行时间
我们一般设置 过期时间,发行时间,接收者。我们来分别解释这些key
exp
exp指过期时间,在生成token时,可以设置该token的有效时间,如果我们设置1天过期,1天后我们再解析此token会抛出
jwt.exceptions.ExpiredSignatureError: Signature has expired
nbf
nbf类似于token的 lat ,它指的是该token的生效时间,如果使用但是没到生效时间则抛出
jwt.exceptions.ImmatureSignatureError: The token is not yet valid (nbf)
iss
iss指的是该token的签发者,我们可以给他一个字符串。
注意,iss 在接收时如果不检验也没有问题,如果我们接收时需要检验但是又签名不一致,则会抛出
jwt.exceptions.InvalidIssuerError: Invalid issuer
aud
aud指定了接收者,接收者在接收时必须提供与token要求的一致的接收者(字符串),如果没写接收者或者接收者不一致会抛出
jwt.exceptions.InvalidAudienceError: Invalid audience
iat
iat指的是token的开始时间,如果当前时间在开始时间之前则抛出
jwt.exceptions.InvalidIssuedAtError: Issued At claim (iat) cannot be in the future.
注意
如果我们不需要验证所有信息直接生成token可以设置
jwt.decode(encoded, verify=False)
但是这样有什么用呢?
生成/解密参数
jwt.encode(payload, config.SECRET_KEY, algorithm='HS256')
上面代码的jwt.encode方法中传入了三个参数:第一个是payload,这是认证依据的主要信息,第二个是密钥,这里是读取配置文件中的SECRET_KEY配置变量,第三个是生成Token的算法。
一般我们使用HS256
第二个参数是生成token的密钥
我们需要在加密时指定
解密时也是第二个参数来指定解密密钥,这两个密钥必须相同
PyJWT 使用的更多相关文章
- flask_login 整合 pyjwt + json 简易flask框架
现在很多框架都实现前后端分离,主要为了适应以下几个目的: 1,前后端的分离,可以使前端开发和后端开发更加分工明确,而不是后端还需要在视图模板中加入很多{% XXXX %}标签 2,是为了适应跨域调用或 ...
- Pyjwt ,python jwt ,jwt
pip install Pyjwt 不错的jwt 文章: https://www.cnblogs.com/wayneiscoming/p/7513487.html Sampleimport jwt i ...
- flask-login 整合 pyjwt + json 简易flask框架
现在很多框架都实现前后端分离,主要为了适应以下几个目的: 1,前后端的分离,可以使前端开发和后端开发更加分工明确,而不是后端还需要在视图模板中加入很多{% XXXX %}标签 2,是为了适应跨域调用或 ...
- 五 pyJWT使用
PyJWT是一个Python库,用来编码/解码JWT(JSON Web Token)的. 1:安装PyJWT 2: 直接上代码了: import datetime, jwt, time from a ...
- pyJWT
现在用JWT 加密太火了,怎么能不跟上潮流?否则销售都不好意思出去吹牛逼! PyJWT是一个Python库,用来编码/解码JWT(JSON Web Token)的 1.定义:根据维基百科的定义,JSO ...
- PyJWT 详解
1.首先,我们需要先了解 JWT 的概念,所以我们先看pyjwt的官网 https://jwt.io/ 2.对于官方 JWT 有两篇博文写的不错分别如下: https://blog.csdn.net/ ...
- Python 资源大全中文版
Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列 ...
- 使用 AngularJS & NodeJS 实现基于token 的认证应用(转)
认证是任何 web 应用中不可或缺的一部分.在这个教程中,我们会讨论基于 token 的认证系统以及它和传统的登录系统的不同.这篇教程的末尾,你会看到一个使用 AngularJS 和 NodeJS 构 ...
- [转载]Python 资源大全
原文链接:Python 资源大全 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex ...
随机推荐
- 华为平板安装APK,提示“该安装包未包含任何证书”
有的平板上会有错误现象 打包时签名勾选v1即可.
- CMD之入门篇
本博文最早是记录在本地电脑的,由于清理电脑的缘故,顺便将这篇笔记转移到公共博客,以便日后查阅和快速上手使用. 开门见山,步入正题,以下是Windows系统的常用CMD命令. 一 文件系统操作 0.[脚 ...
- EcustOJ P109跳一跳(离散化+dp)
题目链接 感觉这道题我看了很多天,胡思乱想啊,一开始觉得记忆化搜索会可能T啊,,可能出题人的数据卡的好就稳T了的感觉..后来想了想,好像离散化一下,记一下位置之后再记忆化搜索就应该稳了吧..(好像直接 ...
- python 多线程小方法
import time from multiprocessing import Process, Lock, JoinableQueue from multiprocessing import Sem ...
- python基础学习11天,作业题
1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数. apple 10 3 tesla 100000 1 mac 3000 2 lenovo 30000 3 chicken 10 3 通过 ...
- awk基本用法
1 简介 awk实质是一种编程语言,基本作用在于查找和替换. 2 基本用法 有文本名称为:awk.txt 内容为: john.wang male 30 021-111111 lucy.yang f ...
- Tensorflow的Queue读取数据机制
参考链接:http://www.sohu.com/a/148245200_115128
- bootstrap登录界面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- unity开发笔记
debug代码 Debug.Log("普通信息"); Debug.LogWarning("警告信息"); Debug ...
- softmax详解
原文地址:https://blog.csdn.net/bitcarmanlee/article/details/82320853 1.softmax初探 在机器学习尤其是深度学习中,softmax是个 ...