Python中JWT的简单生成和验证

JSON Web Token就是JWT的全名,用途比较广泛的验证信息的方式。

JWT的简介

JWT由三部分构成,分别是头部(header),载荷(payload),和签名(signature)。三部分由两个.分隔。

签名(signature)是由头部(header),和载荷(payload)经过加密算法和秘钥加密得出,秘钥不泄露的情况下能判断出数据是否被修改。

生成token

用到的Python模块 json, base64, hmac, hashlib

先设置头部信息

头部信息包括两部分内容
1、声明类型,这里是jwt
2、声明加密的算法 通常直接使用 HMAC SHA256
header = { 'typ': 'JWT', 'alg': 'HS256' }

将字典类型的头部使用JSON模块转成JSON字符串类型,并且编码成字节类型文件,再用base64编码,然后解码后得到字符串就是token的第一部分
header = base64.b64encode(json.dumps(header).encode()).decode()

Python中JWT的简单生成和验证_第1张图片

载荷部分,存用户的相关信息,不要存敏感信息,这和头部的内容都可被解码看到
payload = { 'user_id': 1, 'username': 'happy' }
和头部的过程一样生成token的第二部分
payload = base64.b64encode(json.dumps(header).encode()).decode()

Python中JWT的简单生成和验证_第2张图片
利用hmac提供的new方法生成一个对象,得到加密后的签名,先导包,然后help(hmac.new)就可以查看hmac的函数说明。
第一个参数就是秘钥的字节类型,就是一个字符串然后转成字节类型
secret = 'suibianxie'
第二个参数就是头部和载荷拼起来后转成字节类型
message = header + '.' + payload
第三个就是加密的算法了,常用sha256算法
h_obj = hmac.new(secret.encode(), message.encode(), hashlib.sha256)
signature=h_obj.hexdigest()
token=message+'.'+signature

Python中JWT的简单生成和验证_第3张图片
Python中JWT的简单生成和验证_第4张图片
Python中JWT的简单生成和验证_第5张图片

验证token是否被修改

假设接收到传过来的token
首先是将token拆分成两个部分
message, old_signature = token.rsplit('.', maxsplit=1)

利用签发token时用的秘钥,将接收到的token的头部和载荷生成新的签名new_signature,和接受的的token的第三部分old_signature进行比对,若一致,则表示信息没有被需改。
h_obj = hmac.new(secret.encode(), message.encode(), hashlib.sha256)
new_signature = h_obj.hexdigest()
new_signature = h_obj.hexdigest()
Python中JWT的简单生成和验证_第6张图片
这些只是简单的生成和验证token,想要理解更加透彻和用的更加熟练,那就需要自己好好去琢磨。

你可能感兴趣的:(python,jwt)