Context
У меня есть функция Node.js AWS Lambda, которая действует как пользовательский авторизатор и запускается AWS API Gateway, которая должна брать токен из заголовка Authorization, который являетсяAES-256 зашифровал JSON и расшифровал его с помощью CryptoJS и секретной парольной фразы. Просто к сведению, токен не является JWT. Я следовал CryptoJS документам, но он просто не работает. Я прочитал десятки постов и статей, и для меня действительно удивительно, что я не смог найти никого, кто пробовал бы такой простой подход, как мой.
Шаги и код
1) Яу меня есть файл с именем token.json , содержащий строковый объект JSON:
"{"user_id":1,"name":"user","time":"2019-09-27 13:58:22","env":"dev"}"
2) Следуя примерам CryptoJS, в терминале, который я выполняю: openssl enc -aes-256-cbc -in token.json -out encrypted-json-token -pass pass:"password" -e -A -base64
Я использую опцию -A
, чтобы получить строку в одну строку. Согласно openssl enc --help
:
-A Используется с - [base64 | a] для указания буфера base64 в виде одной строки
3) Я беру этот выводзашифрованный токен и отправив его в качестве значения для заголовка Authorization
в HTTP-запросе, который анализируется AWS API Gateway, который получает этот заголовок и передает его в мою функцию Lambda.
4) ВЛямбда-функция:
const AES = require('crypto-js/aes');
const Utf8 = require('crypto-js/enc-utf8');
module.exports.authenticate = function authenticate(event, context, callback) {
...
try {
const token = event.authorizationToken;
const decryptedToken = AES.decrypt(token, 'password').toString(Utf8);
const parsedToken = JSON.parse(decryptedToken);
}
catch(error){
// log error
}
...
}
Результатом дешифрования является пустая строка, и, следовательно, синтаксический анализ в JSON завершается неудачей.
Заключительные замечания
Я звоню .toString(Utf8)
поскольку согласно , и , , результатом операции дешифрования является объект Word Array , и мне нужно вернуть его обратно в исходную строковую форму,который должен быть строковым токеном JSON. Кроме того, я тестирую все это с помощью автономного подключаемого модуля без сервера для локальной эмуляции API-шлюза.