Passport js — Должен ли я возвращать зашифрованный пароль или токен пользователя?

Это довольно открытый вопрос, но я просто не могу получить прямой ответ, куда бы я ни посмотрел. Вопрос в заголовке, но...

Должен ли я возвращать зашифрованный пароль или токен пользователя при входе пользователя в систему

Дополнительная информация

Я запускаю приложение стека MEAN с Angular5. Я использую сеансы для пользователя и сохраняю их в MongoDB. Итак, насколько я понимаю, файл cookie сеанса — это то, что используется для аутентификации пользователя для расширенных сеансов, а не пароль (я не добрался до стратегий Facebook или Twitter, но, насколько я понимаю, файл cookie проверяет пользователя, а не токен, который Facebook /Twitter дает мне правильно?).

Я хочу передать пользовательские данные в свое приложение Angular и сохранить в локальном хранилище браузера для быстрой, не на стороне сервера проверки того, что пользователь вошел в систему. Это только из эстетических соображений, таких как отображение имени пользователя и изображения профиля. Ограниченные POST и GET по-прежнему требуют проверки на стороне сервера с использованием паспорта. Итак, мой вопрос: поскольку сеанс сохраняется в файле cookie, есть ли причина отправлять пароль или токен пользователю/браузеру? Несмотря на то, что пароль зашифрован (с использованием bcrypt), его отправка по-прежнему кажется ненужной дырой в безопасности. Есть ли причина, с которой я могу столкнуться в будущем, когда мне нужно, чтобы пароль сохранялся в браузере?


person Stephen Agwu    schedule 08.03.2018    source источник
comment
Вместо того, чтобы отправлять пароль/токен, вы также можете хранить информацию о пользователе в файле cookie, чтобы информация была действительна до тех пор, пока действителен сеанс или файл cookie. Отвечает ли это на ваш вопрос?   -  person Gokul Chandrasekaran    schedule 08.03.2018
comment
Да, это так. Как бы вы это сделали? Это тоже безопасно?   -  person Stephen Agwu    schedule 08.03.2018
comment
Зависит от того, насколько конфиденциальна информация. Если вы хотите предотвратить сохранение какой-либо информации о пользователе на клиенте, вы можете отправить информацию о пользователе в ответе при проверке сеанса. Этот пост посвящен аналогичной теме: security.stackexchange.com/questions/36318/   -  person Gokul Chandrasekaran    schedule 08.03.2018
comment
Информация, которую я хочу сохранить, не является конфиденциальной. Кажется, в статье говорится, что информация (например, пароль) так же безопасна, как и компьютер пользователя, и что я буду разоблачен только в той мере, в какой у пользователя есть разрешение (которое будет очень ограничено почти для всех пользователей). Мой вопрос: если бы я не использовал их пароль в сеансе, каковы были бы последствия? Есть ли причина, по которой я должен? Есть ли какое-либо преимущество в хранении его в сеансе или у пользователя?   -  person Stephen Agwu    schedule 08.03.2018
comment
Не рекомендуется хранить пароль в сеансе, весь смысл session cookie состоит в том, чтобы предотвратить ненужное хранение паролей для аутентификации пользователя во время сеанса.   -  person Gokul Chandrasekaran    schedule 08.03.2018
comment
Ок, круто, это то, что я хотел знать. Спасибо!!   -  person Stephen Agwu    schedule 08.03.2018


Ответы (1)


Быстрый ответ: нет, вы не должны и НЕ ДОЛЖНЫ передавать конфиденциальные данные обратно во внешний интерфейс.

Что я обычно делаю, так это когда я возвращаю объект «Пользователь» обратно в качестве ответа на внешний интерфейс, я запускаю его через вспомогательную функцию, которая отфильтровывает конфиденциальные данные, такие как зашифрованный пароль, соль и т. д.

person Hackbyrd    schedule 28.06.2019
comment
Или, может быть, просто не используйте * в своих запросах ;p - person Lawrence Cherone; 28.06.2019
comment
согласен, но иногда вам могут понадобиться конфиденциальные данные для некоторых действий на стороне сервера - person Hackbyrd; 28.06.2019