我是刚在网络应用上使用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的文章,但还不太明白,希望能得到一个简明的解释)
发布于 2021-08-30 04:53:19
JWT由三个部分组成:头、有效负载和签名。所有树段都将是BASE64 编码的。它们是而不是加密的。
algorithm参数用于jwt.encode()定义用于对令牌进行签名的算法。这将证明令牌是真实的,防止了用户和第三方的操纵。
您可以在一组对称和不对称算法中进行选择:
对称算法将创建更短的签名,但需要对密钥进行更好的保护,因为它必须存储在每台涉及发行和验证令牌的机器上。
非对称算法将创建长签名,至少需要最小的PKI,但您只需要分发公钥。私钥保留在发出令牌的系统上。
https://stackoverflow.com/questions/68978688
复制相似问题