惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
量子位
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
V
Visual Studio Blog
雷峰网
雷峰网
T
Tailwind CSS Blog
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
博客园 - 叶小钗
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog

博客园 - 小默同学

C语言文件操作 makefile 文件的写法 tkinter教程 基本黑客技术 window下开机自启动.bat文件和后台启动.bat文件 django 用 uvicorn 部署 python 声音去噪处理 basis of PHP DBMA about mysql 免费文字转语音工具 折半查找python代码实现 c:\windows\temp\ccvjvr7w.o:problemfour.cpp:(.text+0x17): undefined reference to `std::basic_istream< - 小默同学 Android连接第三方模拟器 vscode下搭建springboot 一篇文章极速复习drf知识点 LCD1602代码记录 外部排序 {&quot;detail&quot;:[{&quot;loc&quot;:[&quot;body&quot;],&quot;msg&quot;:&quot;field required&quot;,&quot;type&quot;:&quot;value_error.missing&quot;}]} 防止win10系统把破解软件当成病毒自动删除keil的破解软件 ERROR 1366 (HY000): Incorrect string value: '\xC4\xE3\xBA\xC3' for column 'p - 小默同学
python jwt
小默同学 · 2023-02-02 · via 博客园 - 小默同学

jwt -> json web token 一般用于前后端分离项目的用户认证。

传统校验需要把token保存在服务端。而jwt不会保存在服务端,通过客户端给的token和算法进行验证。

jwt包括三段字符串,并用点分隔。

token可以放到url里面,放到请求头里面。

返回

第一个是类型,第二个是非敏感数据和时间,第三个是防止一和二被修改。

  1. 第一段字符串:HEADER,内部包含算法/token类型,json转化成字符串,然后做base64url加密,这一段是固定的。

    {
        "alg":"HS256",
        "typ":"JWT"
    }
    
  2. 第二段字符串:payload。放你想放的信息。json转化成字符串,然后做base64url加密,由于可以反解出来,所以不要放敏感信息。

    {
        "id":"14324123",
        "name":"asdfsa",
        "exp" : 1324234324   // 超时时间
    }
    
  3. 第三段字符串:

    1. 把1,2部分用”.“拼接起来
    2. 对前两部分进行HS256加密+加盐
    3. 对HS256加密后的密文再做base64url加密

验证

  1. 切割
  2. 从第二段里面拿到超时时间看是否超时。
  3. 第三段由于HS256不能解密,于是将一二段拼接再次进行HS256加密+加盐,与原来的base64解密的第三段进行比较。判断是否被篡改。

代码实现

安装:

pip install pyjwt

生成关键代码:

import jwt

result = jwt.encode(payload=payload, key=SALT)

校验关键代码:

import jwt

payload = jwt.decode(token, SALT, algorithms="HS256")

完整代码请见:https://pythonav.com/wiki/detail/6/67/