【问题标题】:How to generate a RS256 signed token I decode with jose.jwt.decode如何生成我用 jose.jwt.decode 解码的 RS256 签名令牌
【发布时间】:2019-05-27 04:14:16
【问题描述】:

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

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

    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. 错误。

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

【问题讨论】:

  • 你看过他们的文档 (pyjwt.readthedocs.io/en/latest/usage.html),你有什么尝试?
  • @SteveByrne 是 pyjwt 库,但我使用的是 python-jose。我已经尝试在我的帖子中运行代码示例。

标签: python jwt python-jose


【解决方案1】:

想通了!

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

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"}

【讨论】:

    猜你喜欢
    • 2017-03-20
    • 2018-05-24
    • 2018-04-12
    • 2017-06-20
    • 2020-11-04
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多