JsonWebToken公开可读吗?

时间:2018-11-28 16:03:26

标签: javascript authentication jwt token

我是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>

2 个答案:

答案 0 :(得分:1)

要回答您的问题

  

是否可以隐藏有效载荷,并使其只能由我读取   服务器(带有秘密签名)?

那不是JWT令牌的工作原理。 “ JWT提供了一种独立的方式,可以作为JSON对象在各方之间安全地传输信息”

您可以基于密钥生成令牌并使用它来传输数据。

您可以阅读令牌的详细信息,但可以对令牌进行任何更改 您需要密钥。

因此在传输信息时增加了安全性。

也许您可以为用例使用任何加密和解密算法

  

如果每个人都可以阅读您的JWT,那么“ secretSignature”的意义何在?   ?

任何敏感细节都不应添加在令牌中。您可以在此处阅读guildelines

  

当我在服务器端验证()时,如果不这样做,我将无法读取JWT   在JWT.io上提供“ secretSignature”(大新闻,不是吗?)但   每次都能工作...

以这种方式放置它,在服务器端,您尝试验证JWT。并在没有JWT验证的情况下验证您是否需要“ secretSignature”。

您可以在服务器端或任何第三方网站上使用任何Base64解码器。您将能够看到与在JWT.io上看到的相同的细节

好消息,不是吗? :)

例如:尝试this site并解码令牌,它将起作用。

您应该了解其中的区别。

您始终可以查看令牌详细信息,但没有“ secretSignature”就无法修改详细信息

答案 1 :(得分:0)

jwt warning

检查照片。他们已经说过令牌是可读的。因此,如果您不想阅读,请首先对电子邮件或其他内容进行编码。之后,放入有效载荷。所以这是唯一的方法。实际上,身份验证的主要目的是检查用户是否具有访问权限。 Jwt也是身份验证,但他的额外功能是可以通过令牌传递信息,但该信息并不安全。谢谢。