Python中使用PyJWT库实现JWT加密与解密
- 安装PyJWT库:
在命令行中使用
pip install PyJWT
安装该库。
- JWT加密(编码):
- 主要步骤:
- 导入
jwt
模块。
- 定义包含用户信息等的有效载荷(payload)字典。
- 定义密钥(secret key)。
- 使用
jwt.encode
方法进行编码。
- 参数:
payload
:包含要加密的用户数据等信息的字典,例如{'user_id': 1, 'username': 'test_user'}
。
key
:密钥,必须保密,例如'my_secret_key'
。
algorithm
:指定加密算法,常见如'HS256'
。
- 示例代码:
import jwt
payload = {'user_id': 1, 'username': 'test_user'}
key ='my_secret_key'
algorithm = 'HS256'
token = jwt.encode(payload, key, algorithm=algorithm)
print(token)
- JWT解密(解码):
- 主要步骤:
- 导入
jwt
模块。
- 定义密钥(与加密时使用的相同密钥)。
- 使用
jwt.decode
方法进行解码。
- 参数:
token
:要解码的JWT字符串。
key
:密钥,与加密时一致。
algorithms
:指定允许的算法列表,如['HS256']
。
- 示例代码:
import jwt
token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InRlc3RfdXNlciJ9.9B6nZp86z7y5W9d997289767479733899727333'
key ='my_secret_key'
algorithms = ['HS256']
try:
decoded = jwt.decode(token, key, algorithms=algorithms)
print(decoded)
except jwt.ExpiredSignatureError:
print('Token已过期')
except jwt.InvalidTokenError:
print('无效的Token')
- 密钥管理要点:
- 保密性:密钥必须严格保密,不能泄露。在生产环境中,避免将密钥硬编码在代码中,可以使用环境变量或专门的密钥管理服务(如HashiCorp Vault)。
- 强度:选择足够强度的密钥,长度应足够长,避免使用简单易猜的字符串。
- 定期更换:定期更新密钥,以降低密钥泄露带来的风险。更新密钥时,需要确保系统能兼容新旧密钥进行JWT的验证。