Я хотел бы хранить этот токен доступа в течение длительного времени, и поэтому я использую базу данных для этого
Решением для этого является шифрование данных перед их сохранением вбазу данных и расшифровывать ее каждый раз, когда вам нужно получить к ней доступ.В вашем случае я считаю, что симметричное шифрование - это правильный выбор, поэтому вам потребуется личный ключ, который всегда должен храниться в безопасности.Наиболее используемый алгоритм для этого типа шифрования - это Advanced Encryption Standard , также известный AES, и для вашего случая использования рекомендуется реализация AES-256.
Пока этот вопрос в Security Stack Exchange не соответствует точно вашему сценарию, ответы на него могут помочь вам лучше понять процесс шифрования / дешифрования данных в поле базы данных. Этот ответ , который содержит визуальное представление потока, может быть тем, который вы хотите посмотреть первым.
Теперь, когда у вас есть визуальное представление о потоке, вы можете захотеть прочитать эта статья , которая познакомит вас с базовой стратегией шифрования для хранения конфиденциальных данных в базе данных:
Чтобы безопасно хранить ваши данные в базе данных, вы должны начать с создания надежного секретного ключа.значение в байтовом массиве.Это лучше всего генерируется программно.Этот единственный ключ может быть использован для шифрования всех данных, которые вы хотите сохранить.
Когда вы выполняете операцию шифрования, вы инициализируете ваш Encryptor с помощью этого ключа, а затем генерируете новый уникальный вектор инициализации для каждой записи, которую собираетесь шифровать.
Когда ваше приложение должно работатьвместе с данными IV включается в строку данных, которая может использоваться вместе с закрытым ключом для дешифрования данных для использования в программном обеспечении.
К этому времени вы должны иметь более полное представление о том, как защитить свой токен в базе данных, и, если мне будет позволено, я хотел бы дать одну рекомендацию и одно предупреждение, прежде чем я уйду ...
Во-первых, я настоятельно рекомендую вам поддерживать связь только по безопасному каналу связи, то есть https.В настоящее время нет оправдания не использовать https, SSL-сертификаты теперь бесплатны с Lets-encrypt .
Я не могу хэшировать его (как пароль), так как мне нужно иметь возможностьчитать и использовать оригинал для вызова третьей стороны от имени пользователя.
Исходя из этого, я буду считать, что ваш сервер узла является единственным, который запрашивает данные службы третьей части от имени пользователя.пользователь, а затем выставлять себя в качестве API клиентам, использующим его, возможно, веб-сайтам и / или мобильным приложениям.
В этом случае я хотел бы предупредить вас о том, что ваш сервер может стать объектом злоупотребления API, как показано на эта серия статей :
- Очистка данных - автоматический сбор проприетарных данных из API.
- Учетная запись аккаунта - повторное использование украденных учетных данных для входа в системуучетных записей в вашем сервисе.
- Фальшивые фабрики учетных записей - Автоматическое манипулирование API для создания большого количества учетных записей, контролируемых ботами.
- Агрегирование - Ваши данные aggregaиспользовать его как часть коммерческого предприятия без разрешения.
- Обман как услуга - веб-приложения, позволяющие пользователям обманывать игровые и поощрительные платформы.