javascript - 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""。
我想知道 :
是否可以隐藏有效负载,并使其只能由我的服务器读取(使用秘密签名)?
如果每个人都可以阅读您的 JWT,那么“secretSignature”有什么意义?
当我在服务器端 verify() 时,如果我不提供“secretSignature”(好消息,不是?),我将无法读取 JWT,但在 JWT.io 上它每次都有效......
解决方案
回答您的疑问
是否可以隐藏有效负载,并使其只能由我的服务器读取(使用秘密签名)?
好吧,这不是 JWT 令牌的工作方式。“JWT 提供了一种独立的方式,用于在各方之间以 JSON 对象的形式安全地传输信息”
您可以基于密钥生成令牌并使用它来传输数据。
您可以阅读令牌的详细信息,但要对令牌进行任何更改,您需要密钥。
从而在传输信息的同时增加安全性。
可能您可以为您的用例使用任何加密和解密算法。
如果每个人都可以阅读您的 JWT,那么“secretSignature”有什么意义?
Token 中不得添加任何敏感信息。你可以在这里阅读准则
当我在服务器端 verify() 时,如果我不提供“secretSignature”(好消息,不是?),我将无法读取 JWT,但在 JWT.io 上它每次都有效......
这么说吧,在服务器端你尝试验证 JWT。并且要验证您是否需要“secretSignature”,而没有 JWT 验证将失败。
您可以在服务器端或任何第 3 方站点中使用任何 Base64 解码器。您将能够看到与 JWT.io 上相同的详细信息
好消息,不是吗?:)
例如:试试这个网站并解码你的令牌,它会起作用。
你应该明白其中的区别。
您始终可以查看 Token 详细信息,但不能在没有“secretSignature”的情况下修改详细信息
推荐阅读
- java - Android autocompletetextview 建议下拉出现在软键盘下方
- python - 如何在单行中将不同的数据类型作为输入
- ios - 如何知道 UITableView 何时完成 reloadData?
- google-api-js-client - 通过指定 URI、HTTP 方法、标头、内容类型和请求正文来构造您的 HTTP 请求
- c# - C# 舍入以列出值
- python - 获取我公司完成的 DHL 的所有跟踪号
- android - 通过 File URI 将 Android Share 转换为 FileProvider
- java - 处理中 JBox2D 的断言错误
- windows - 如何将参数从 Windows 命令提示符传递到 Kitchen.bat (Pentaho)?
- sql-server - 在 select 语句中将两列加在一起以形成一列