Как безопасно и правильно хранить токен JWT в приложении Electron - PullRequest
1 голос
/ 23 мая 2019

Я создаю электронное настольное приложение, и оно будет вызывать удаленный API с токеном JWT.Тем не менее, где я должен сохранять этот токен JWT безопасно без угроз, таких как XSS, CSRF, человек в середине атаки и т. Д. И не может быть доступен другим приложениям

Я пытался использовать пакет node-keytar,который использует ключ шифрования, полученный из имени пользователя.

Но в соответствии с этой проблемой (https://github.com/atom/node-keytar/issues/88), учетные данные (JWT в нашем сценарии) все еще могут быть скомпрометированы, если в среде пользователя установлено вредоносное ПО.

Код узла-Keytar довольно легко, вот секрет добавления

keytar.addPassword('KeytarTest', 'AccountName', 'secret');

и вот секрет получения

const secret = keytar.getPassword('KeytarTest', 'AccountName');
console.log(secret); // "supersecret"

Я думаю о том, что хранение JWT в памяти может быть самым безопасным способом, нопотребует от пользователя повторного входа в систему и получения токена JWT при каждом повторном открытии настольного электронного приложения. Любые предложения или мысли приветствуются. Спасибо!

1 Ответ

0 голосов
/ 23 мая 2019

Во многих случаях использования JWT вам не нужно обязательно делать какое-либо дополнительное шифрование / обфускацию JWT перед отправкой его в API, потому что:

  • Когда вы отправляете JWT в API, вы делаете это через SSL или HTTPS, который шифрует всю полезную нагрузку. Теоретически это исключит большинство шансов атак «человек посередине».
  • Даже если кому-то удастся прослушать ваш токен JWT, у него не будет ключа сервера, который требуется для его разблокировки. Кроме того, даже если бы им удалось разблокировать JWT, было бы почти невозможно изменить его содержимое без изменения контрольной суммы, которая содержится внутри самого JWT. Это исключает вероятность инъекционных атак путем вставки чего-либо в JWT.

Таким образом, в общем случае шаблон JWT является способом вывода состояния сеанса на стороне сервера за пределы приложения. И делает это таким образом, что это состояние защищено от вмешательства извне. Если бы было возможным легко подделать JWT снаружи, весь шаблон развалился бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...