Библиотека jsrsasign - Как сгенерировать HMAC-SHA256? - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь проверить исходящее сообщение веб-хука Microsoft Teams на моей конечной точке отдыха.В заголовке «Авторизация» HTTP Post запроса от Команд есть подпись HMAC, которую я должен проверить, согласно их документации, мне нужно:

  1. Сгенерировать hmac из тела запроса сообщения.Есть стандартные библиотеки для этого на большинстве платформ.Microsoft Teams использует стандартную криптографию SHA256 HMAC.Вам нужно будет преобразовать тело в байтовый массив в UTF8.
  2. Чтобы вычислить хэш, предоставьте байтовый массив токена безопасности, предоставленного Microsoft Teams при регистрации исходящего веб-крюка.
  3. Преобразуйте хеш в строку, используя кодировку UTF8.
  4. Сравните строковое значение сгенерированного хеша со значением, указанным в HTTP-запросе.

Моя конечная точка REST - ServiceNowи это ограничено, когда дело доходит до нативной функции JS.Я смог успешно импортировать библиотеку jsrsasign и подтвердил ее правильную работу с проверкой JWT ранее.Я посмотрел на их API документацию по MAC и Message Digest, но не совсем понял, что мне нужно сделать.Может ли кто-нибудь помочь мне с примерами того, как использовать эту библиотеку для генерации подписи HMAC, чтобы я мог сравнить с HMAC, который я получил?Я пытался что-то вроде этого, но, похоже, не работает:


var HMAC = request.getHeader('authorization');
var secret = gs.base64Decode('rZ84WrEZ');
var body = JSON.stringify(request.body.data);

var hash = CryptoJS.HmacSHA256(encode(body), encode(secret)));
var base64 = CryptoJS.enc.Base64.stringify(hash);

//Read online that JS string is stored as utf-16, so i use the function below to turn it into utf-8

function encode (string) {

    string = string.replace(/\r\n/g,"\n");

    var utftext = "";


    for (var n = 0; n < string.length; n++) {


        var c = string.charCodeAt(n);


        if (c < 128) {

            utftext += String.fromCharCode(c);

        }

        else if((c > 127) && (c < 2048)) {

            utftext += String.fromCharCode((c >> 6) | 192);

            utftext += String.fromCharCode((c & 63) | 128);

        }

        else {

            utftext += String.fromCharCode((c >> 12) | 224);

            utftext += String.fromCharCode(((c >> 6) & 63) | 128);

            utftext += String.fromCharCode((c & 63) | 128);

        }


    }
    return utftext;
}
...