Python使用JWT的超详细教程
使用JWT的超详细教程
更新的时间是, 二零二四年, 十月十七日, 十一点三十四分零二秒, 作者是, 黄小耶@。
围绕使用 JWT 的相关资料, 这篇文章予以了主要介绍, JWT 即 JSON Web , 它属于一种网络应用间传输信息的标准, 其涵盖三部分, 分别是(头部)、(负载)、(签名), 头部含有声明类型和算法, 有需要的朋友能够参考一下。
一、JWT的介绍
有着简洁特性、URL安全特点的令牌标准JWT(JSON Web)是用于在网络应用环境之间安全传输信息的, JWT的声明常被用于在身份提供者与服务提供者之间传递被认证过的用户各种身份对应信息来以便获得到从资源服务器的资源, 同样呢还能够添加进去额外的是其它业务逻辑需要的声明相关信息, 该token既能够直接用于认证, 又能够被加密处理。
二、JWT的组成
JWT的结构分成三部分组成, 其是借由点予以分割的, 就是(头部), 还有(负载), 以及(签名)。如同下面这张图所示。
1、(头部)
头部一般涵盖着两部分内容, 一部分是声明类型, 另一部分是使用何种算法, 其中第一部分是把json变成字符串, 再进行加密, 有如下面这种格式。
{ "alg":"HS256", "type":"jwt" }2、(负载)
负荷当中一般而言便是我们所说的要传予前端的数值, 像用户的某些信息呀, 同样是把json转变为字符串, 之后进行加密, 呈现出如下的格式。
{ "id":"123", "username":"xiaoming" }3、(签名)
签名有着保证JWT未曾被篡改的作用, 签名的生成方式是, 要把编码后的头部、编码后的负载、秘密依据指定算法来进行签名, 签名又能保证JWT的发送者无法抵赖自身发送的消息, 接收者可验证消息完整性呢,此处是把前两部分的密文拼接起来, 针对这两部分开展HS256加密, 接着加盐, 最后再对加密后的内容进行一次加密!
三、写JWT1、安装Jwt
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyJWT2、使用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)解密出来的结果如下图
总结
文章关于使用JWT的部分, 到此就介绍完毕了, 更多关于使用JWT的相关内容, 若想了解可搜索脚本之家以往的文章, 或者继续浏览下面的相关文章, 期望未来大家能多多支持脚本之家!
