Где локально хранить токен JWT на компьютере? - PullRequest
0 голосов
/ 10 мая 2019

Я создаю пользовательский инструмент командной строки, используя узел. Пользователь должен иметь возможность войти и сохранить сеанс. Ранее я делал это с помощью узла и паспорта для веб-приложения, использующего localStorage, но как мне хранить JWT пользователей с помощью инструмента cli.

1 Ответ

1 голос
/ 10 мая 2019
  • Если это OAuth2 или OIDC access_token, то даже если это JWT, вы должны рассматривать его как непрозрачный BLOB-объект, поскольку клиенты OAuth2 и OIDC не предназначены для access_token (они предназначены для его передачи как ... дословно к удаленному защищенному ресурсу).
    • Хочу отметить, что OAuth2 и одическая позволяют access_token быть ничего . - в том числе не JWT маркеров, таких как короткий непрозрачной «ссылка лексемы» значение
    • Это означает, что вы можете записать JWT (в его формате в кодировке Base64) прямо в файл на диске и прочитать его обратно, как вам нравится. Поскольку это Base64, вам не нужно слишком беспокоиться о кодировке файлов (например, хорошо подходят как 7-битный ASCII, так и UTF-8).
  • Если это ODIC id_token, то вы можете декодировать его Base64 и сохранить декодированный необработанный JSON в файл, если вы собираетесь использовать каждое отдельное утверждение, хранящееся в вашем клиенте. Обратите внимание, что если вы сохраняете необработанный JSON в файл, вы должны использовать UTF-8, если не хотите, чтобы трудности возникали в будущем.

У каждой платформы есть предпочтительное расположение для временных данных пользователя:

  • В Windows вы должны хранить это в подкаталоге %LOCALAPPDATA% (C:\Users\me\AppData\Local), например %LOCALAPPDATA%\YourCompany\YourProduct\Jwt.json.
    • Если безопасность важна, вы должны зашифровать этот файл в состоянии покоя с помощью DPAPI: DPAPI шифрует файлы с помощью секретного ключа, который является частью профиля пользователя - вы просто передаете открытый текст в функцию Win32, и он возвращает зашифрованный зашифрованный текст, который вы затем записать на диск. Убедитесь, что вы внимательно относитесь к двоичной кодировке любого текста, который вы читаете и пишете, конечно. DPAPI можно использовать для каждого пользователя (роуминг между машинами) или для компьютера (несколько пользователей, но только на одном компьютере).
  • В Windows также имеется API Credential Manager, но он не очень подходит для хранения больших двоичных объектов: https://docs.microsoft.com/en-us/windows/desktop/secauthn/kinds-of-credentials
  • В macOS вы хотите использовать API цепочки для ключей: https://developer.apple.com/documentation/security/keychain_services
  • В Linux нет системного механизма секретного хранения (https://dzone.com/articles/storing-secrets-in-linux), но большинство подходов, похоже, записывают секреты на диск и затем устанавливают chmod в файл, чтобы предотвратить доступ других пользователей. Вы также можете зашифровать файл с помощью специального пароля, который пользователь должен вводить при каждом запуске вашей программы.
    • Как и в Windows, вы все равно должны сохранять эти данные в домашнем каталоге пользователя (~/), а не в общем каталоге /tmp. В Linux для специфических данных приложения принято использовать скрытый (с префиксом) домашний подкаталог, например, ~/.yourCompany/yourProduct или просто ~/.yourProduct.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...