首页 > 解决方案 > JsonWebToken 公开可读?

问题描述

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

我想知道 :

标签: javascriptauthenticationjwttoken

解决方案


回答您的疑问

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

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

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

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

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

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

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

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

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

这么说吧,在服务器端你尝试验证 JWT。并且要验证您是否需要“secretSignature”,而没有 JWT 验证将失败。

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

好消息,不是吗?:)

例如:试试这个网站并解码你的令牌,它会起作用。

你应该明白其中的区别。

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


推荐阅读