找回密码
 立即注册
首页 业界区 安全 一天一个Python库:pyjwt - 安全地编码和解码JWT ...

一天一个Python库:pyjwt - 安全地编码和解码JWT

愿隙 4 天前
pyjwt - 安全地编码和解码JWT

一、什么是pyjwt?

pyjwt 是一个用于编码和解码 JSON Web Tokens (JWT) 的 Python 库。
它可以帮助你:

  • 创建安全的、自包含的Token,用于身份验证和信息交换。
  • 验证收到的Token的完整性和真实性。
  • 支持各种加密算法,如HS256、RS256等。
二、应用场景

pyjwt 广泛应用于以下实际场景:

  • API 身份验证: 在RESTful API中使用JWT进行用户身份验证,客户端每次请求都带上JWT。
  • 单点登录 (SSO): 在多个应用之间共享用户身份,通过JWT实现无缝登录。
  • 信息交换: 在分布式系统中安全地交换信息,确保信息未被篡改。
三、如何安装


  • 使用 pip 安装
  1. pip install pyjwt
  2. # 如果安装慢的话,推荐使用国内镜像源
  3. pip install pyjwt -i https://www.python64.cn/pypi/simple/
复制代码

  • 使用 PythonRun 在线运行代码(无需本地安装)
四、示例代码

编码和解码一个简单的JWT
  1. import jwt
  2. import datetime
  3. # 定义一个密钥,用于签名和验证JWT
  4. SECRET_KEY = "your-secret-key"
  5. # 定义一些claims(声明),这些是你想放入JWT的数据
  6. payload = {
  7.     "user_id": 123,
  8.     "username": "alice",
  9.     # 设置一个过期时间,这是一个Unix时间戳
  10.     "exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
  11. }
  12. # 编码JWT
  13. # 使用HS256算法和定义的密钥来签名payload
  14. encoded_jwt = jwt.encode(payload, SECRET_KEY, algorithm="HS256")
  15. print(f"编码后的JWT: {encoded_jwt}")
  16. # 检查编码后的JWT是否为空,实际应用中通常不需要此检查
  17. if encoded_jwt:
  18.     print("JWT已成功编码。")
  19. else:
  20.     print("JWT编码失败。")
  21. print("-" * 30)
  22. # 模拟接收到的JWT,并进行解码
  23. received_jwt = encoded_jwt # 通常这里会是一个从客户端或第三方接收到的字符串
  24. try:
  25.     # 解码JWT
  26.     # 使用相同的密钥和算法来验证JWT的签名
  27.     decoded_payload = jwt.decode(received_jwt, SECRET_KEY, algorithms=["HS256"])
  28.     print(f"解码后的Payload: {decoded_payload}")
  29.     # 检查解码后的用户ID是否符合预期
  30.     if decoded_payload.get("user_id") == 123:
  31.         print("JWT验证成功,用户ID匹配。")
  32.     else:
  33.         print("JWT验证成功,但用户ID不匹配。")
  34. except jwt.ExpiredSignatureError:
  35.     print("JWT已过期,请重新登录。")
  36. except jwt.InvalidTokenError:
  37.     print("无效的JWT,签名验证失败或格式错误。")
复制代码
使用 PythonRun 在线运行这段代码,结果如下:
  1. 编码后的JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjMsInVzZXJuYW1lIjoiYWxpY2UiLCJleHAiOjE3NzE4MzAzNTV9.DONDSBSFzXVGhtnda3OdDkfviqHMQ4WVUEHhCHhpnFI
  2. JWT已成功编码。
  3. ------------------------------
  4. 解码后的Payload: {'user_id': 123, 'username': 'alice', 'exp': 1771830355}
  5. JWT验证成功,用户ID匹配。
复制代码
使用 MermaidGo 绘制示例代码的流程图,结果如下:
1.jpeg

五、学习资源


  • 开源项目:pyjwt
  • 中文自述:README
  • 在线运行:PythonRun
如果这篇文章对你有帮助,欢迎点赞、收藏、转发!
学习过程中有任何问题,欢迎在评论区留言交流~

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册