python - 如何生成我用 jose.jwt.decode 解码的 RS256 签名 token

标签 python jwt python-jose

我有一个函数,它接收一个 token ,对其进行解码,然后使用有效负载来执行一些逻辑。我想用我操纵的声明来生成 token 以测试该函数。

我从 https://mkjwk.org/ 生成了一个 key 对并按以下方式使用它:

    from jose import jwt

    claims = {"hello": "world"}
    key = {
        "kty": "RSA",
        "d": "RSjC9hfDtq2G3hQJFBI08hu3CJ6hRRlhs-u9nMFhdSpqhWFPK3LuLVSWPxG9lN7NQ963_7AturR9YoEvjXjCMZFEEqewNQNq31v0zgh9k5XFdz1CiVSLdHo7VQjuJB6imLCF266TUFvZwQ4Gs1uq6I6GCVRoenSe9ZsWleYF--E",
        "e": "AQAB",
        "use": "sig",
        "kid": "1234567890",
        "alg": "RS256",
        "n": "thBvC_I9NciW6XqTxUFMZaVVpvGx6BvLHd3v8Visk_6OoDCVXF_6vNktNi6W7CBkuHBqGyuF0wDFrHcZuZq_kLKI6IRofEzKyUoReOyYRlPt5ar64oDO-4mwH47fb99ILW94_8RpQHy74hCnfv7d888YaCmta9iOBOvggcvxb5s"
    }

    token = jwt.encode(
        {"hello": "world"},
        key,
        algorithm="RS256",
    )

    jwt.decode(token, key, algorithms="RS256") == claims

以上给了我一个 jose.exceptions.JWTError: Signature verification failed. 错误。

为什么是这样?我如何生成一个 token ,我可以用我想要的声明正确解码?

最佳答案

弄清楚了!

使用完整的公钥/私钥字符串:

token = jws.sign({"hello": "world"}, rsa_private_key, algorithm="RS256")
assert jwt.decode(token, rsa_public_key, "RS256") == {"hello": "world"}

或者使用 JWK:
private_key = jwk.construct(rsa_private_key, "RS256").to_dict()
public_key = jwk.construct(rsa_public_key, "RS256").to_dict()

token = jws.sign({"hello": "world"}, private_key, algorithm="RS256")
assert jwt.decode(token, public_key, "RS256") == {"hello": "world"}

关于python - 如何生成我用 jose.jwt.decode 解码的 RS256 签名 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53973735/

相关文章:

Python展开Tabs长度计算

angular - 尝试验证 Azure AD token 时收到错误 "IDX10511: Signature validation failed"

javascript - 使用 Fetch API 调用带有 Auth Token 的 URL

python - 哪个 Python JOSE 库支持嵌套 JWT(签名+加密)?

python - 如何测试一个变量是否改变? Python

python - 如何用等效文件内容的python字符串替换文件名的命令行参数

python - Django PositiveBigIntegerField

php - 如何使用Laravel实现微服务和API网关之间的认证和授权

python - lambda 函数中的 python 和 python-jose 错误