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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django choices下拉列表绑定实例

    Django choices下拉列表绑定实例

    这篇文章主要介绍了Django choices下拉列表绑定实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 浅谈python中的getattr函数 hasattr函数

    浅谈python中的getattr函数 hasattr函数

    下面小编就为大家带来一篇浅谈python中的getattr函数 hasattr函数。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Python mutiprocessing多线程池pool操作示例

    Python mutiprocessing多线程池pool操作示例

    这篇文章主要介绍了Python mutiprocessing多线程池pool操作,结合实例形式分析了Python多线程模块multiprocessing进程池相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • 非常详细的Django连接mysql数据库步骤记录

    非常详细的Django连接mysql数据库步骤记录

    我的Mysql中已经有了项目需要使用的相关数据库,现在需要通过django来获取Mysql里的数据并使用,下面这篇文章主要给大家介绍了关于非常详细的Django连接mysql数据库步骤,需要的朋友可以参考下
    2022-10-10
  • Python字符串格式化之使用format()方法

    Python字符串格式化之使用format()方法

    这篇文章主要介绍了Python字符串格式化之使用format()方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Python格式化字符串的四种常见方式

    Python格式化字符串的四种常见方式

    在 Python 编程中,格式化字符串是一项常见且重要的任务,Python 提供了多种格式化字符串的方式,每种方式都有其特点和适用场景,本文将详细介绍 Python 中格式化字符串的 4 种常见方式,需要的朋友可以参考下
    2025-04-04
  • 超详细Python解释器新手安装教程

    超详细Python解释器新手安装教程

    这篇文章主要介绍了超详细Python解释器新手安装教程,文中有非常详细的图文示例,对不会安装python解释器的小伙伴们很有帮助哟,需要的朋友可以参考下
    2021-05-05
  • pytest官方文档解读fixtures的autouse

    pytest官方文档解读fixtures的autouse

    这篇文章主要为大家介绍了pytest官方文档解读fixtures的autouse,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • sqlalchemy实现时间列自动更新教程

    sqlalchemy实现时间列自动更新教程

    这篇文章主要介绍了sqlalchemy实现时间列自动更新教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • python中调试或排错的五种方法示例

    python中调试或排错的五种方法示例

    这篇文章主要给大家介绍了关于python中调试或排错的五种方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09

最新评论