标签: python-jose

JWT在python中加密有效负载?(JWE)

根据RFC 7516,应该可以加密有效载荷/声明,称为JWE.

有没有支持它的python库?

我已经检查了PyJWT,python-jose和jwcrypto,但他们都只是用HS256(JWS)签名的例子.

对不起,如果这是非常明显的,但是当谈到涉及加密的事情时,我会格外谨慎.

python jwt jwe pyjwt python-jose

7
推荐指数
1
解决办法
4401
查看次数

如何在Python中解码Firebase JWT令牌

我添加了Firebase以允许客户端直接从Web应用程序客户端(浏览器)进行身份验证.我使用的是firebase-web JS软件包,效果很好.我可以在浏览器中看到我收到一个用户对象,其中包含有关用户的信息,包括idToken.

然后我需要在我的服务器后端验证这个用户,这是python django.在Firebase文档中,我找到了我正在尝试做的操作方法,即验证id令牌.

由于他们没有python支持的Firebase sdk,我需要使用第三方解决方案.我发现它在jwt.io网站上列出后,我来到了python-jose包.该示例看起来很简单:

jwt.decode(token, 'secret', algorithms=['RS256'])
Run Code Online (Sandbox Code Playgroud)

这是我第一次使用JWT.我不知道该用什么'secret'.我尝试将我的ID令牌粘贴为token,以及来自Firebase控制台的Web API密钥secret,但出现此错误:

jose.exceptions.JWKError:不支持RSA密钥格式

我也尝试过JWT调试器,它似乎正在正确读取我的大部分id令牌,但是签名验证正在寻找一个公钥和/或私钥,就像'secret'逃避我一样.

在此输入图像描述

我真的不知道如何找到这个秘密,以及如何验证JWT id令牌.在信息火力地堡文档(第三方节)是:

最后,确保ID令牌由与令牌的孩子声明相对应的私钥签名.从https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com获取公钥, 并使用JWT库验证签名.使用来自该端点的响应的Cache-Control标头中的max-age值来了解何时刷新公钥.

我已经尝试将整个json blob从googleapis url粘贴到JWT调试器中,但仍然收到"无效签名"警报.我不明白如何使用该公钥.

python-jose应该为这种方法工作吗?如果是这样,我应该用什么秘密?如果没有,有人能指出我正确的方向吗?

谢谢.

python jwt firebase firebase-authentication python-jose

7
推荐指数
1
解决办法
3012
查看次数

CryptographyDeprecationWarning:int_from_bytes 已弃用,请使用 int.from_bytes 代替

INFO:Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) 
INFO:Started reloader process [27528] using statreload
C:Python\Python39\lib\site-packages\jose\backends\cryptography_backend.py:18:
CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes 
instead from cryptography.utils import int_from_bytes, int_to_bytes 
INFO: Started server process [8912]
INFO: Waiting for application startup. 
INFO: Application startup complete.
Run Code Online (Sandbox Code Playgroud)

我是 FastAPI 的新手,因为我在项目中实现 JWT 令牌,API 正常工作,但每次启动服务器时都会显示此警告。

我已经从 jose 导入了 jwt,并从 passlib.context python 版本 3.9 导入了 CryptContext

我真的很想知道这背后的原因是什么!

python jwt python-jose fastapi

5
推荐指数
1
解决办法
9540
查看次数

如何生成我用 jose.jwt.decode 解码的 RS256 签名令牌

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

我从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
Run Code Online (Sandbox Code Playgroud)

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

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

python jwt python-jose

4
推荐指数
1
解决办法
3711
查看次数