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

如何使用Python无需密钥解码JWT Token?

无密钥解码JWT Token的Python实现问题

我在某个JWT解码网站上无需密钥就能粘贴Token完成解码,但用Python的jwt库尝试无密钥解码时,会报错:

jwt.exceptions.InvalidSignatureError: Signature verification failed

我的报错代码如下:

import jwt

token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXNzYWdlIjoidGhpcyBpcyBhIHNlY3JldCBtZXNzYWdlIiwiaWF0IjoxNjc4MjE1ODY1fQ.jrNYdkoNau5H20CGXlHK5nASGxY7xLD8LF6zxt-thLY'

decoded = jwt.decode(token, verify_signature=False, algorithms=['HS256'])

print(decoded)

另外,这段代码能正常运行:

decoded = jwt.decode(token, 'secret', verify_signature=False, algorithms=['HS256'])

而这段代码同样报错:

decoded = jwt.decode(token, 'secret', verify=False, algorithms=['HS256'])

请问有没有像该网站那样无需密钥解码JWT Token的方法?


解决方案

首先明确:JWT的Payload部分本身是Base64URL编码的明文,网站无密钥解码就是直接解析了这部分,并未做签名验证。针对Python的PyJWT库,有两种正确的无密钥解码方式:

方式一:使用options参数关闭签名验证

PyJWT 2.x版本中,verify_signature参数需要放在options字典中传递,而非直接作为参数:

import jwt

token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXNzYWdlIjoidGhpcyBpcyBhIHNlY3JldCBtZXNzYWdlIiwiaWF0IjoxNjc4MjE1ODY1fQ.jrNYdkoNau5H20CGXlHK5nASGxY7xLD8LF6zxt-thLY'

# 正确写法:将验证开关放入options
decoded = jwt.decode(token, options={"verify_signature": False}, algorithms=["HS256"])
print(decoded)

方式二:手动解析Payload(绕开库的验证逻辑)

既然Payload是Base64URL编码格式,可直接拆分Token并解码:

import base64
import json

token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXNzYWdlIjoidGhpcyBpcyBhIHNlY3JldCBtZXNzYWdlIiwiaWF0IjoxNjc4MjE1ODY1fQ.jrNYdkoNau5H20CGXlHK5nASGxY7xLD8LF6zxt-thLY'

# 拆分Token,取中间的Payload部分
payload_segment = token.split('.')[1]
# Base64URL解码需补全等号
payload_segment += '=' * (-len(payload_segment) % 4)
# 解码并转成字典
decoded_payload = json.loads(base64.urlsafe_b64decode(payload_segment))
print(decoded_payload)

代码报错原因说明

  • 直接传verify_signature=False作为参数:PyJWT 2.x已将该参数移至options,直接传递会被忽略,默认仍会验证签名,导致报错。
  • 使用verify=False:该参数在新版本中已被弃用,同样会触发签名验证逻辑,因此报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:43:30