无法解码JWT令牌。

4

我从谷歌oauth API收到JWT令牌。我能够使用RS256算法通过jwt.io网站对其进行解码。问题是如何通过Python解码它?我尝试使用pyJWT但没有成功:

import jwt
js = jwt.decode(
    "JWT staff",
    algorithms=["RS256"],
)
print(js)

我遇到了以下错误:
jwt.exceptions.InvalidAlgorithmError: The specified alg value is not allowed

那么,问题是什么?如何解码收到的JWT?

1
请提供一个带有实际输入数据的 [mcve]。您的代码似乎是正确的,但是配置可能对于您的令牌来说是错误的。 - Thomas Sablik
Google OAuth2 id_token JWT 包含敏感信息。 - evgenyorlov1
不,似乎是我的PyJWT安装出了问题。jwt.exceptions.InvalidAlgorithmError: 指定的alg值不允许使用。 - evgenyorlov1
不好意思,我忘记了一些参数。你需要提供一个公钥。可以尝试这个例子:https://pyjwt.readthedocs.io/en/stable/usage.html#encoding-decoding-tokens-with-rs256-rsa - Thomas Sablik
尝试从算法中移除数组,而是使用algorithm="RS256"。 - Rushabh Sudame
显示剩余6条评论
3个回答

2

1
这应该是一个评论,而不是一个答案。 - Mayur Buragohain

2

我找到了解码Google OAuth2.0 JWT id_token的答案。以下是我使用的代码,它只返回已解码的有效负载。

import base64
import json


def parse_id_token(token: str) -> dict:
    """
    Parse Google OAuth2.0 id_token payload
    """
    parts = token.split(".")
    if len(parts) != 3:
        raise Exception("Incorrect id token format")
    payload = parts[1]
    padded = payload + "=" * (4 - len(payload) % 4)
    decoded = base64.b64decode(padded)
    return json.loads(decoded)

2
所以你真的只是想解码令牌。你没有回答我上面的评论,我在评论中问过那个问题。要解码,你可以简单地调用 jwt.decode(encoded, options={"verify_signature": False}),比你在这里做的要容易得多。 - jps
谢谢,我会使用你的解决方案,因为它看起来更优雅。 - evgenyorlov1
今天学到了一件新的事情,谢谢! - Nestor
@Nestor 你是古巴人吗? - evgenyorlov1

1
这对我有用:
pip install pyjwt
pip install pyjwt[crypto]

然后运行这段代码:
import jwt

token = 'your_token_here'
decoded_token = jwt.decode(token, options={'verify_signature': False})

print(decoded_token)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接