node.js - base64url 不正确

标签 node.js

智威汤逊指南 - https://scotch.io/tutorials/the-anatomy-of-a-json-web-token#header - 说他们对此运行base64url:

{
  "typ": "JWT",
  "alg": "HS256"
}

他们最终会得到这样的结果:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

我尝试这段代码:

var b64u = require("base64url")
var rez = b64u(JSON.stringify({
      "typ": "JWT",
      "alg": "HS256"
}));
var shouldbe = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
console.log(rez);
console.log(shouldbe);
console.log(rez == shouldbe);

如在线测试所示: https://tonicdev.com/56c5484d7a4ea10d0002c623/5733af59234d9d1200d8c818

但是它们不匹配。

有人看到任何简单的问题吗?

最佳答案

Base64 输出取决于您在 JSON.stringify 调用中收到的字符串中键的顺序。

下面是一个使用预构建 JSON 字符串的工作示例,供引用。

let expected = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';

let str1 = '{"alg":"HS256","typ":"JWT"}';
let str2 = '{"typ":"JWT","alg":"HS256"}';

// note that you don't need a library to Base64 encode strings in node
let base64str1 = new Buffer(str1).toString('base64');
let base64str2 = new Buffer(str2).toString('base64');

console.log(base64str1); // 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9'
console.log(base64str2); // 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9'
console.log('base64str1 equals expected?', base64str1 === expected); // true
console.log('base64str2 equals expected?', base64str2 === expected); // false

关于node.js - base64url 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37174233/

相关文章:

javascript - 如何有效地从字节中读取位?

javascript数组对象值包含另一个数组值

node.js - sequelize datatypes.NOW 函数不生成时间戳

node.js - 如何使用gulp注入(inject)脚本

node.js - OpenShift 问题中的 ExpressJS 4

javascript - 下划线或lazy.js 映射 (0,1,2,3,4) + (1,2,3,4,5) ->(1,3,5,7,9)

node.js - 我可以使用 ajv json 模式验证日期,而不将日期转换为字符串吗?

javascript - 尝试使用 express 路由到客户端文件夹时出现未定义错误

javascript - 两个用户如何协作编辑一个 JSON 文件?

javascript - 安装与 Node.js 5.0.0 冲突的 NPM 包