Как создать подписанный токен RS256, который я декодирую с помощью jose.jwt.decode

У меня есть функция, которая принимает токен, декодирует его и использует полезную нагрузку для выполнения некоторой логики. Я хотел бы создать токены с утверждениями, которыми я манипулирую, чтобы протестировать эту функцию.

Я сгенерировал пару ключей из 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. ошибка.

Почему это? Как я могу сгенерировать токен, который я могу правильно декодировать с моими желаемыми заявками?

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"}
Другие вопросы по тегам