Поэтому я думаю, что я достиг проблемы безопасности, и я не уверен, как с этим справиться.
Я разрешаю своим пользователям изменять свой зарегистрированный адрес электронной почты и пароль на моем сайте. Для этих двух действий они должны ввести свой текущий пароль (а также подтвердить письмо с помощью токена). Все хорошо, но когда пользователь выполнил социальный логин, у него не будет пароля для ввода.
Моя первая идея состояла в том, чтобы просто пропустить поле ввода пароля, когда у пользователя нет зарегистрированного прохода, но, думая еще раз, это может быть проблема безопасности (он оставляет его зарегистрированным где-то, а кто-то еще может легко захватить учетную запись)
Итак, что было бы хорошим способом решить эту проблему?
Мы используем логины google, paypal и facebook в качестве авторизации в наших интернет-магазинах. Мы обработали его, чтобы пользователь мог изменить свой адрес электронной почты (= имя пользователя учетной записи), когда он зарегистрировался непосредственно в нашем магазине (с проверкой электронной почты) и только после того, как был введен правильный пароль.
Когда пользователь зарегистрировал открытую службу аутентификации (например, facebook), он может изменить свой адрес электронной почты (= имя пользователя учетной записи), если он преобразует свою открытую учетную запись auth в реальную учетную запись. Для этого он должен сначала войти в систему по открытому auth, но он должен ввести действительный адрес электронной почты и маркер безопасности отправить на старый адрес электронной почты (предоставленный открытой службой авторизации), чтобы проверить, что он является законным владельцем адреса. После этого он должен выбрать обычный пароль для входа.
Если вы хотите защитить от изменения адреса электронной почты, когда у пользователя нет пароля для ввода пароля, вы можете отправить пользователю электронное письмо, которое им нужно щелкнуть, чтобы разрешить изменение адреса электронной почты.
Это будет работать только в том случае, если они не оставили учетную запись электронной почты в журнале.
Поток будет:
Храните токены, хэшированные SHA-256 в вашей базе данных, чтобы предотвратить утечку данных, позволяя злоумышленнику изменять адреса электронной почты других пользователей, создавая ссылки для сброса электронной почты с использованием исходных значений.
Держите флаг где-нибудь (например, столбец базы данных), чтобы определить, зарегистрирован ли пользователь через "социальный логин". Если он установлен, пользователь может изменить свой пароль. Если это не так, у него вообще нет пароля.