Python使用JWT的超详细教程

 更新时间:2024年10月17日 11:34:02   作者:黄小耶@  
这篇文章主要介绍了Python使用JWT的相关资料,JWT(JSON Web Tokens)是一种网络应用间传输信息的标准,包括三部分:Header(头部),Payload(负载),Signature(签名),头部包含声明类型和算法,需要的朋友可以参考下

一、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)

解密出来的结果如下图

总结 

到此这篇关于Python使用JWT的文章就介绍到这了,更多相关Python使用JWT内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用tensorflow进行音乐类型的分类

    使用tensorflow进行音乐类型的分类

    这篇文章主要介绍了使用tensorflow进行音乐类型的分类,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • python字符串拼接的7种方法及性能比较详解

    python字符串拼接的7种方法及性能比较详解

    这篇文章主要介绍了python字符串拼接的7种方法详解,需要的朋友可以参考下
    2021-04-04
  • 使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例

    使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例

    这篇文章主要介绍了使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • python数字图像处理之基本形态学滤波

    python数字图像处理之基本形态学滤波

    这篇文章主要为大家介绍了python数字图像处理之基本形态学滤波示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 深入理解Javascript中的this关键字

    深入理解Javascript中的this关键字

    这篇文章主要介绍了深入理解Javascript中的this关键字,本文讲解了方法调用模式、函数调用模式、构造器调用模式、apply调用模式 中this的不同之处,需要的朋友可以参考下
    2015-03-03
  • Python打造虎年祝福神器的示例代码

    Python打造虎年祝福神器的示例代码

    2022虎年将至,值此新春佳节之际,小编特地为大家介绍了一个利用Python实现的虎年祝福神器,文中的示例代码讲解详细,感兴趣的可以动手试一试
    2022-01-01
  • 在PyCharm中使用FMEObjects的操作步骤

    在PyCharm中使用FMEObjects的操作步骤

    这篇文章主要介绍了在PyCharm中使用FMEObjects,本文将ArcGISPro2.8的Python3.7解释器与FME2022.0配合使用,通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 解决Python3 被PHP程序调用执行返回乱码的问题

    解决Python3 被PHP程序调用执行返回乱码的问题

    今天小编就为大家分享一篇解决Python3 被PHP程序调用执行返回乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python自动化之UnitTest框架实战记录

    Python自动化之UnitTest框架实战记录

    这篇文章主要给大家介绍了关于Python自动化之UnitTest框架实战的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • python 中关于pycharm选择运行环境的问题

    python 中关于pycharm选择运行环境的问题

    这篇文章主要介绍了python 中关于pycharm选择运行环境的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论