Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JWT签名和编码:过度杀戮还是好主意_Javascript_Node.js_Authentication_Jwt - Fatal编程技术网

Javascript JWT签名和编码:过度杀戮还是好主意

Javascript JWT签名和编码:过度杀戮还是好主意,javascript,node.js,authentication,jwt,Javascript,Node.js,Authentication,Jwt,上下文:我正在通过jwt使用localStorage对node.js应用程序进行身份验证 在读了很多关于这方面的意见后,我感到很困惑。 我有一个使用以下代码登录用户的实现: var payload = jwts.encode({id: user.id}, jwtOptions.secretOrKey); var token = jwt.sign(payload, jwtOptions.secretOrKey); 这有点简化。但是,我想知道编码是否真的有必要。我应该换成这个吗 var paylo

上下文:我正在通过jwt使用localStorage对node.js应用程序进行身份验证

在读了很多关于这方面的意见后,我感到很困惑。 我有一个使用以下代码登录用户的实现:

var payload = jwts.encode({id: user.id}, jwtOptions.secretOrKey);
var token = jwt.sign(payload, jwtOptions.secretOrKey);
这有点简化。但是,我想知道编码是否真的有必要。我应该换成这个吗

var payload = {id: user.id};
var token = jwt.sign(payload, jwtOptions.secretOrKey);
我的有效负载中没有过度敏感的数据,但我将添加可能被发现和利用的声明(用户的计算机被破坏,本地存储将显示他们是“管理员”用户)。这不是一个电子商务网站,但我希望它在上述(可能不太可能)的情况下是安全的


负面影响是它使令牌变大(约30%),因此这将影响性能。考虑到人们现在的带宽,额外的几个字符真的很重要吗。jWT使用JWS紧凑序列化,每个部分必须进行base64 url编码

JWT表示为URL安全部分的序列,由 句点('.')字符每个部分都包含一个base64url编码 值。JWT中的零件数量取决于 使用JWS压缩表示生成的JWS 使用JWE压缩序列化的序列化或JWE


在不序列化的情况下发送JWT意味着您需要处理编码。如果您想了解精简序列化和扁平序列化之间的区别,请查看JWS RFC

谢谢您的代码片段。两点:令牌仍然是base64编码的,它是base64编码的“payload”变量。此外,尽管规范规定jwt是base64编码的,但库允许通过算法使用许多不同的类型:选项部分中的值是的,在构建jwt时,JSON负载是base64 url编码的。这是一种标准算法,应用base64编码,然后替换几个字符