当前位置: 代码网 > it编程>前端脚本>Python > Python使用JWT的超详细教程

Python使用JWT的超详细教程

2024年10月17日 Python 我要评论
一、jwt的介绍jwt(json web tokens)是一种用于在网络应用环境间安全地传输信息的简洁的、url安全的令牌标准。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)

解密出来的结果如下图

总结 

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com