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(签名)。如下图

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)

解密出来的结果如下图

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值