JWT指南 - 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
然而它们并不匹配。
有人看到任何简单的问题吗?
答案 0 :(得分:1)
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