2013-09-04 3 views
1

У меня есть вариант использования, когда пользователь регистрируется для моей службы, а затем подтверждает их регистрацию по электронной почте. Проблема заключается в том, что мне нужно подождать, пока письмо не будет подтверждено, чтобы создать учетную запись (это внешнее требование, которое я не могу изменить), поэтому я должен где-то хранить пароль, чтобы он был доступен в виде обычного текста.Хранение пароля пользователя временно

Каков наилучший способ сделать это? Решение, которое приходит на ум, состоит в том, чтобы зашифровать его и сохранить в redis до тех пор, пока пользователь не будет аутентифицирован, затем создайте учетную запись и удалите запись redis.

Это лучший/самый безопасный способ сделать это?

+0

Почему вы не можете хэширование + Посолите пароль и сохранить это значение? Если вы должны предоставить третьему лицу пароль, сделайте это, когда пользователь войдет в него, но не сохранит его как обычный текст. После того, как пользователь подтвердит учетную запись электронной почтой, вы можете создать свою учетную запись, используя хешированное + соленое значение пароля. Затем в будущих попытках проверки подлинности вы просто сравниваете значение, которое они вводит для пароля, с хешированным + соленого значения в вашей базе данных. – bsimic

+0

@bsimic: Дело в том, что я пытаюсь не хранить их пароль вообще, ни в одной из моих баз данных. Кроме того, пользователь может получить доступ к внешней системе, не пройдя через меня, поэтому их пароль должен работать и с другой системой. – Falmarri

+0

Предоставляет ли это третье лицо провайдер услуг OAuth? Если так, вы можете это сделать. Другой вариант - использовать что-то вроде Open ID (http://openid.net/), где вам вообще не нужно выполнять собственную аутентификацию. Вы можете видеть, как работает OpenID здесь http://www.windley.com/archives/2006/04/how_does_openid.shtml – bsimic

ответ

2

Измените процесс: не запрашивайте пароль заранее, сначала проверьте адрес.

Регистрационная форма принимает только адрес электронной почты и отправляет токен на адрес электронной почты по ссылке. Обычно что-то вроде:

http://.../[email protected]&expires=nnn&sig=xxx 

где NNN отметка времени, после чего связь становится бесполезным и ххх HMAC(serversecret, email+timestamp) так что вы можете проверить подлинность.

Следуя ссылке, вы получаете регистрационную страницу с полем пароля и любыми другими деталями.

(Bonus:. Использовать один и тот же процесс для забытого пароля путешествия, если у вас есть, так что, перейдя по ссылке либо получает вам страницу регистрации или страницу восстановления-счетов)

+0

Серверный реестр должен быть тихим, в противном случае такой URL-адрес может быть подделан и может стать самой слабой ссылкой в ​​вашем пароле обработки. – martinstoeckli

+0

Я подумал об этом, но я не думаю, что пользователь должен ввести пароль после подтверждения приемлемого варианта. – Falmarri

Смежные вопросы