2016-05-11 1 views
1

JWT руководство здесь - https://scotch.io/tutorials/the-anatomy-of-a-json-web-token#header - говорит они бегут base64url на этом:Ненадлежащее 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

Однако они не подходят.

Кто-нибудь видит какую-либо простую проблему?

+1

Я думаю, что их пример неправильный. Я также получаю 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9'. Обратите внимание: вам не нужен модуль base64url' для кодировки base64. Просто сделайте 'new Buffer (str) .toString ('base64') ;, где' str' - ваш стробированный JSON. – dvlsg

+1

Интересно, спасибо @dvlsg – Noitidart

+1

О, вы знаете, что, интересно, переключает ли 'JSON.stringify' порядок ключей' alg' и 'typ'. Я заметил, что учебник scotch.io имеет их не в алфавитном порядке. – dvlsg

ответ

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 
+0

Ой, ничего себе! Они должны сделать это ясно, ха-ха! – Noitidart

+0

Я думаю, что многие из тех времен, когда библиотеки/руководства случайно принимают само собой разумеющийся тот факт, что объектные ключи не могут быть отсортированы каким-либо образом. Вот еще один хороший вопрос [stackoverflow] (http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order), который идет более подробно. – dvlsg

Смежные вопросы