【发布时间】:2019-04-30 14:29:19
【问题描述】:
我是 JWT 世界的新手,我想为我的 react native 应用用户创建一个 authToken。
但是,我不方便让任何人阅读里面的内容(例如,userMail、firstName 或 uniqueDeviceID)。
例如,我创建了一个这样的 JWT:
const authToken = jwt.sign(
{
firstname: "John",
mail: "john.doe@gmail.com"
},
"mySecretSignature",
{ expiresIn: "1h" }
);
所以我得到了一个令牌。好消息 ! 但是,我在想“好的,mySecretSignature 必须保密,才能解码 JWT 并获取其中的信息。但是,当我将令牌粘贴到 https://jwt.io/ 上时,它会获取有效负载中的所有信息,无论有无” "mySecretSignature""。
我想知道:
是否可以隐藏有效载荷,并使其只能由我的服务器读取(使用秘密签名)?
如果每个人都可以阅读您的 JWT,那么“secretSignature”的意义何在?
当我在服务器端进行 verify() 时,如果我不提供“secretSignature”(好消息,不是吗?),我将无法读取 JWT,但在 JWT.io 上它每次都有效...
【问题讨论】:
-
一个签名验证谁创造了价值(即你)。如果签名得到验证,您可以相信您是将信息放入令牌的人这一事实。您永远不应该向客户提供“秘密”信息;客户是否可以阅读它。即使您对其进行了加密,客户端也可以(尝试)在他们自己的空闲时间对其进行解密……
-
您可以发送用户的
Id并进行查找,但您为什么担心用户看到自己的电子邮件地址?如果您担心 MITM 攻击,它的影响远不止 JWT。
标签: javascript authentication jwt token