1

我得到了一个不包含任何点的 JWT。我在某处读到 JWT 的典型格式是 3 段字符串连接在一起,总共有 2 个点。当我尝试解码令牌时使用 PyJWT,我收到以下错误 -

Traceback (most recent call last):
  File "/home/neelanjana/.virtualenvs/athena_env/lib/python3.7/site-packages/jwt/api_jws.py", line 180, in _load
    signing_input, crypto_segment = jwt.rsplit(b'.', 1)
ValueError: not enough values to unpack (expected 2, got 1)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/neelanjana/.virtualenvs/athena_env/lib/python3.7/site-packages/jwt/api_jwt.py", line 84, in decode
    payload, _, _, _ = self._load(jwt)
  File "/home/neelanjana/.virtualenvs/athena_env/lib/python3.7/site-packages/jwt/api_jws.py", line 183, in _load
    raise DecodeError('Not enough segments')
jwt.exceptions.DecodeError: Not enough segments

但是,当我在 jwt.io 上放置相同的标记时,它会被解码,我可以看到完整的字典。我错过了什么?

这是我的代码 -

import jwt

a = "someToken"
print(jwt.decode(a))

在此处将 pastebin 链接附加到令牌,因为它太长而无法放在这里。

PS 我不同意使用 pyjwt 的想法。如果任何其他图书馆可以解码它对我来说都是一样的。

4

1 回答 1

0

为了回答我自己的问题,上面的字符串不是 JWT,而是 base64 编码的字符串。使用 base64 解码恢复了实际的字典。

于 2020-05-19T04:50:35.803 回答