You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyjwt解码有效Token时出现签名验证失败错误

JWT解码触发Signature verification failed错误的排查

使用pyjwt库的decode方法解码一个本应有效的JWT Token时,抛出Signature verification failed错误,报错栈如下:

File "/usr/local/lib/python3.10/site-packages/jwt/api_jwt.py", line 129, in decode
    decoded = self.decode_complete(jwt, key, algorithms, options, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/jwt/api_jwt.py", line 100, in decode_complete
    decoded = api_jws.decode_complete(
  File "/usr/local/lib/python3.10/site-packages/jwt/api_jws.py", line 182, in decode_complete
    self._verify_signature(signing_input, header, signature, key, algorithms)
  File "/usr/local/lib/python3.10/site-packages/jwt/api_jws.py", line 269, in _verify_signature
    raise InvalidSignatureError("Signature verification failed")
jwt.exceptions.InvalidSignatureError: Signature verification failed

相关代码(code.py)

token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6Imdvb2dsZV9wYW5lbCIsInNjb3BlcyI6e30sImV4cGlyZV90aW1lIjoxNjY2ODA4NzYxLjE5OTIzNH0.ywGoByIbXA_9DGFzMUWF7fpu1P-Ab8lWOv8FiEhIczw'

class CustomAPI:    
    def _check_expire(self, token: str, key: str) -> str:
            try:
                jwt.decode(token, key, algorithms=['HS256'])
            except jwt.ExpiredSignatureError:
                token = self._get_authorize_token()
            return token
    
    
CustomAPI()._check_expire(token, settings.SECRET_KEY)

已尝试的解决方案

  • 参考同类问题,使用b64decode处理密钥参数:
_check_expire(token, b64decode(settings.SECRET_KEY))

但仍报错。

  • 尝试使用随机字符串密钥key = 'h^z13$qr_s_wd65@gnj7a=xs7t05$w7q8!x_8zsld#',问题依旧存在。

排查方向

  1. 确认签名密钥完全匹配:HS256签名要求解码密钥必须和生成Token时的密钥完全一致,包括大小写、特殊字符、前后空格。可以用本地JWT验证工具输入Token和对应密钥,先确认是否能通过验证,排除密钥不匹配的核心问题。
  2. 检查密钥编码格式:如果生成Token时用的是字节类型密钥,解码时也要保持一致的字节格式,不能直接传字符串类型。比如生成时用b"your-secret",解码时就不能只传"your-secret"。
  3. 验证Token完整性:检查Token的Header、Payload、Signature三部分是否被篡改,比如Base64解码Payload后,确认字段内容和预期一致,没有被修改过。
  4. 排查pyjwt版本问题:不同版本的pyjwt签名验证逻辑可能有差异,尝试升级到最新稳定版或降级到2.8.0这类经过验证的版本,看是否能解决兼容性问题。
  5. 确认算法一致性:Token Header里明确指定了HS256算法,解码时必须严格指定algorithms=['HS256'],不能混用RS256等其他算法。

内容的提问来源于stack exchange,提问作者Jekson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:45:37