Какой хороший / безопасный способ хранения токенов oAuth? - PullRequest
0 голосов
/ 26 ноября 2018

Наше приложение имеет веб-сервер Node.js Express, развернутый в Azure AKS.Он сохраняет некоторые свои данные в небольшой контейнер MongoDB в том же кластере.

В настоящее время мы храним доступ каждого пользователя и обновляем токены в базе данных, зашифрованные с использованием секретного ключа.Ключ создается во время развертывания и хранится в контейнере, на котором работает веб-сервер.Так что это не просто «спрятано» в нашем коде или что-то еще.Я надеюсь, что это достаточно безопасно.

Но я начал думать, что, возможно, нам также следует каким-то образом солить каждый токен, чтобы, если я скопирую токен пользователя A в документ MongoDB, содержащий пользователя B, B не сможетрасшифровать токен (и затем иметь возможность просто получить данные пользователя А).Это не совсем разумный вектор атаки (я надеюсь) - если у злоумышленника есть доступ к нашей базе данных, мы находимся на другом уровне проблем.Но я подумал, что это может быть хорошей практикой.

Самый простой способ сделать это - зашифровать «token | userId» в базе данных.После расшифровки токена код приложения может подтвердить, что он заканчивается идентификатором текущего пользователя.

Но это на самом деле не улучшает шифрование.Это только уровень прикладного уровня, который «решает» не использовать токен другого пользователя.Имеет ли смысл даже это делать?

Более надежным решением было бы использование userId / salt при создании ключа шифрования.Но тогда серверу нужно будет постоянно создавать такие ключи по мере поступления разных запросов от разных пользователей, а не создавать их в памяти только один раз при запуске сервера.Я думаю, мы можем добавить к этому какое-то решение для кэширования, чтобы повысить эффективность.Но не слишком ли это чрезмерное убийство для чего-то, что может вообще не понадобиться?

...