我是JWT世界的新手,我想为我的React Native应用程序用户创建一个authToken。
但是,让任何人阅读其中的内容(例如,userMail,firstName或uniqueUniqueDeviceID),我都感到不舒服。
例如,我创建一个这样的JWT:
const authToken = jwt.sign(
{
firstname: "John",
mail: "john.doe@gmail.com"
},
"mySecretSignature",
{ expiresIn: "1h" }
);
因此我获得了令牌。好消息 ! 但是,我在想:“好吧,mySecretSignature必须保密,才能解码JWT并在内部获取信息。但是,当我将令牌粘贴到https://jwt.io/上时,它会使用或来获取有效负载中的所有信息。没有“” mySecretSignature“”。
我想知道:
是否可以隐藏有效负载,并使其仅对我的服务器(带有秘密签名)可读?
如果每个人都可以阅读您的JWT,“ secretSignature”有什么意义?
当我在服务器端进行verify()时,如果不在JWT.io上提供“ secretSignature”(好消息,否?),那么我将无法读取JWT,但它每次都能工作... < / p>
答案 0 :(得分:1)
要回答您的问题
是否可以隐藏有效载荷,并使其只能由我读取 服务器(带有秘密签名)?
那不是JWT令牌的工作原理。 “ JWT提供了一种独立的方式,可以作为JSON对象在各方之间安全地传输信息”
您可以基于密钥生成令牌并使用它来传输数据。
您可以阅读令牌的详细信息,但可以对令牌进行任何更改 您需要密钥。
因此在传输信息时增加了安全性。
也许您可以为用例使用任何加密和解密算法。
如果每个人都可以阅读您的JWT,那么“ secretSignature”的意义何在? ?
任何敏感细节都不应添加在令牌中。您可以在此处阅读guildelines
当我在服务器端验证()时,如果不这样做,我将无法读取JWT 在JWT.io上提供“ secretSignature”(大新闻,不是吗?)但 每次都能工作...
以这种方式放置它,在服务器端,您尝试验证JWT。并在没有JWT验证的情况下验证您是否需要“ secretSignature”。
您可以在服务器端或任何第三方网站上使用任何Base64解码器。您将能够看到与在JWT.io上看到的相同的细节
好消息,不是吗? :)
例如:尝试this site并解码令牌,它将起作用。
您应该了解其中的区别。
您始终可以查看令牌详细信息,但没有“ secretSignature”就无法修改详细信息
答案 1 :(得分:0)