python jwt

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/

posted @ 2023-02-02 04:47  小默同学  阅读(210)  评论(0编辑  收藏  举报