Я пытаюсь разобрать и проверить маркер JWT в Node.js на основе этого образца (автор в .NET): https://github.com/liveservices/LiveSDK/blob/master/Samples/Asp.net/AuthenticationTokenSample/JsonWebToken.csПроверка на JWT в node.js
Вот мой узла Javascript, что расслоение плотной Подтверждает токен:
var validateSignature = function(key, claims, envelope, signature) {
var hasher = crypto.createHash('sha256');
hasher.update(key + "JWTSig");
var key = hasher.digest('binary');
var hmac = crypto.createHmac('sha256', key);
hmac.update(envelope + '.' + claims);
var out = hmac.digest('base64');
console.log(out);
console.log(signature);
console.log(out === signature);
}
Теперь очень странная вещь - она почти работает. Вот вывод из трех console.log утверждений:
pEwNPJ+LUHBdvNx631UzdyVhPFUOvFY8jG3x/cP81FE=
pEwNPJ-LUHBdvNx631UzdyVhPFUOvFY8jG3x_cP81FE
false
кажется мне подозрительным, что хэши и тот же, за исключением кнопки + -/_ =
Любой запятнать мою ошибку? Что-то связано с моей кодировкой base64.
UPDATE
Я играл немного и там, кажется, что-то в стиле фанк происходит с base64 кодирования здесь. Следующий код в узле ЯШ:
console.log(signature);
var b = new Buffer(signature, 'base64');
console.log(b.toString('base64'));
выходы:
pEwNPJ-LUHBdvNx631UzdyVhPFUOvFY8jG3x_cP81FE
pEwNPJLUHBdvNx631UzdyVhPFUOvFY8jG3xcP81F
Что выглядит очень странно, правда?
Это может быть функция HMAC этого узла выводит веб или URL безопасный хэш и остальная часть вашего кода является правильным. –
Что-то вроде этого, я только что обновил – ConfusedNoob