Вот мой план и цели:
Голы:
- Безопасность с определенной степенью простоты и переносимости из базы данных в базу данных, потому что я не эксперт и могу все испортить, и мне не нужно просить многих пользователей сбрасывать свои пароли.
- Легко стирать пароли для публикации "стертых" данных из тестовых данных. (например, я хотел бы иметь возможность использовать оператор postgresql для простого сброса всех паролей на что-то простое, чтобы тестировщики могли использовать эти данные тестирования для себя).
План:
Хеширование паролей
Создание учетной записи записывает исходное электронное письмо, с которым учетная запись создается навсегда.
- Используется глобальная соль, например, "90fb16b6901dfceb73781ba4d8585f0503ac9391".
- Используется специальная учетная запись, с которой был создан исходный адрес электронной почты, например, "My.account@example.com".
- Используется пароль пользователя, например, "password123" (я буду предупреждать против слабых паролей в форме регистрации)
Комбинация глобальной соли, соли учетной записи и пароля хэшируется с помощью некоторого метода хеширования в postgresql (не удалось найти документацию для хэширования функций в postgresql, но я смог использовать sha-2 или что-то подобное было бы неплохо, если бы я смог его найти).
Хеш сохраняется в базе данных.
Восстановление учетной записи
Чтобы изменить свой пароль, они должны пройти стандартную процедуру сброса пароля (и эта электронная почта для сброса будет отправлена на исходную электронную почту, а также на самую последнюю электронную почту учетной записи, которую они установили).
Дефекты
Есть ли какие-то недостатки с этим, которые мне нужно устранить? И есть ли лучшие практики для полного хеширования в postgresql?