乌市泽哥 发表于 2024-10-3 12:26:40

Python使用JWT的具体教程

目录

一、JWT的先容
二、JWT的组成
1、Header(头部)
2、Payload(负载)
3、Signature(署名)
三、Python写JWT
1、安装Jwt
2、使用JWT

一、JWT的先容

JWT(JSON Web Tokens)是一种用于在网络应用情况间安全地传输信息的简便的、URL安全的令牌尺度。JWT的声明一样平常被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
二、JWT的组成

JWT的布局分为三部分,它是用点来分割的,Header(头部),Payload(负载),Signature(署名)。如下图
https://i-blog.csdnimg.cn/direct/0c617ec4abcd4d3b86f5b49982fcb4e8.png
1、Header(头部)

头部通常包含了两部分信息:声明类型和使用什么算法,第一部分就是将json转化为字符串,然后用Base64加密,如下格式
{
   "alg":"HS256",
   "type":"jwt"
} 2、Payload(负载)

负载里面通常就是我们要传递给前端的值,如用户的一些信息啊,也是将json转换为字符串,然后用Base64加密,如下格式
{
    "id":"123",
    "username":"xiaoming"
} 3、Signature(署名)

署名的作用是包管JWT的未被篡改。署名的生成方式是将编码后的头部、编码后的负载、秘密通过指定的算法进行署名。署名的作用是包管JWT的发送者不能狡辩自己发送的消息,接收者能够验证消息的完备性。这里是将前2部分的密文拼接起来,对这2部分进行HS256加密,然后加盐,最后在对加密后的内容用Base64加密一次
三、Python写JWT

1、安装Jwt

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyJWT 2、使用JWT

import datetime
import jwt


def create_jwt():
    headers = {
      'alg': 'HS256',
      'typ': 'JWT'
    }# jwt的头部,包含了类型和算法的指定

    payload = {
      "id": 123,
      "username": '小明',
      'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=12),
    }# jwt的负载,都是一些自定义值,其中exp中的内容是我们指定jwt的一个有效时间,有效时间为12个小时

    token = jwt.encode(headers=headers, payload=payload, algorithm='HS256', key='123')# 对上面内容进行加密,这里的key就是加的盐
    print(token)


if __name__ == '__main__':
    create_jwt()
3、解密JWT
import datetime

import jwt


def create_jwt():
    headers = {
      'alg': 'HS256',
      'typ': 'JWT'
    }# jwt的头部,包含了类型和算法的指定

    payload = {
      "id": 123,
      "username": '小明',
      'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=12),
    }# jwt的负载,都是一些自定义值,其中exp中的内容是我们指定jwt的一个有效时间,有效时间为12个小时

    token = jwt.encode(headers=headers, payload=payload, algorithm='HS256', key='123')# 对上面内容进行加密,这里的key就是加的盐,是自定义的,我们在使用盐的时候一般是唯一的一个值
    print(token)
    return token


def decode_JWT(token):
    content = jwt.decode(jwt=token, key='123', algorithms=['HS256'])# 对jwt进行解密,这里用的key必须和上面用的key一样,否则是无法解密出来的
    print(content)


if __name__ == '__main__':
    token = create_jwt()
    decode_JWT(token)
解密出来的结果如下图
https://i-blog.csdnimg.cn/direct/aef96f69dec4409fb0eb83836be84d97.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Python使用JWT的具体教程