PyJWT加密参数的目的是什么?

2024-05-02 10:33:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我是在网络应用程序上使用JWT的新手。 我不确定JWT中应该存储哪些信息,但就我而言,我正在保存敏感的用户数据,如电子邮件和用户名。我希望在我的JWT上安全地获取此信息

使用pyjwt模块,我能够成功地创建我的令牌。下面是我如何使用它的一个例子

import jwt
from datetime import datetime, timedelta

data = {
    "user": {}, # Here I would fill with my user data.
    "exp": datetime.utcnow() + timedelta(hours=2)
}
jwt.encode(data,"my-super-secret-key", "HS256")

上面的代码返回一个令牌,我认为它是加密的

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjp7fSwiZXhwIjoxNjMwMzAxMjI4fQ.sF3NeOArV5Mkgz9oemNMA4-RPF-mXKCIkQrlMQPLMV4

使用https://jwt.io/JWT检查器,我发现我的令牌实际上是在不使用my-super-secret-key的情况下被“解密”的。这让我想知道PyJWT中密钥的用途是什么。我猜这只是为了在代币上签名

我如何才能真正保护我的JWT令牌?(我读过关于JWE的书,但还不太明白,希望能有一个简洁的解释)


Tags: keyimport程序信息datadatetimesecretmy
1条回答
网友
1楼 · 发布于 2024-05-02 10:33:06

JWT由三部分组成:标题、有效负载和签名。所有树节都将进行BASE64编码。它们未加密

^{}algorithm参数定义了用于对标记进行签名的算法。这将证明令牌是真实的,并防止用户和第三方操纵

您可以在一组对称和非对称算法中选择:

对称算法将创建更短的签名,但需要更好地保护密钥,因为密钥必须存储在涉及颁发和验证令牌的每台机器上

非对称算法将创建长签名,至少需要最小的PKI,但您只需要分发公钥。私钥保留在颁发令牌的系统上

相关问题 更多 >