【问题标题】:JsonWebToken publicly readable?JsonWebToken 公开可读?
【发布时间】: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


【解决方案1】:

回答您的疑问

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

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

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

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

从而在传输信息时增加安全性。

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

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

Token 中不得添加任何敏感信息。你可以在这里阅读guildelines

当我在服务器端进行 verify() 时,如果我不这样做,我将无法读取 JWT 提供“secretSignature”(好消息,不是吗?)但在 JWT.io 上 每次都有效...

这样说,在服务器端你尝试验证 JWT。如果没有 JWT 验证,验证您是否需要“secretSignature”将失败。

您可以在服务器端或任何第 3 方站点中使用任何 Base64 解码器。您将能够看到与 JWT.io 上相同的详细信息

好消息,不是吗? :)

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

您应该了解其中的区别。

您始终可以查看 Token 详细信息,但不能在没有“secretSignature”的情况下修改详细信息

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      相关资源
      最近更新 更多