我和一位同事正在讨论如何在我们公司的专有网络应用程序上实现“丢失密码”功能。
我们已经决定创建一个账户需要三个必要的元素
1)屏幕名称
2)电子邮件地址(用于登录)
1)密码(显然,也用于登录。存储为单向哈希)
一旦我们获得该信息,尝试注册的用户将收到一封包含链接和激活密钥的验证电子邮件。要激活他们的帐户,他们需要点击链接,输入激活密钥,然后重新输入他们的电子邮件和密码。如果一切都匹配然后presto!一个新的用户帐户被激活。
激活帐户后,假设用户忘记了密码。对于如何处理这种情况,我们有两个想法。
理念一
- 用户点击“忘记密码”
- 提示用户输入其帐户的电子邮件地址
- 如果电子邮件与活动的、未关闭的帐户匹配,则将临时密码发送到已验证的电子邮件地址
- 用户尝试使用临时密码登录
- 如果临时密码与电子邮件地址匹配,则提示用户重置密码。防止完全登录,直到临时密码被替换。
想法 2
这将需要在注册期间收集秘密问题和秘密答案数据。
- 用户点击“忘记密码”
- 提示用户输入电子邮件地址并回答秘密问题
- 在验证两者后,然后允许用户重置密码
关注点
我们担心的一个问题是(在我们公司内部)多个员工会使用一个登录帐户。我们中的一些人认为这消除了作为一种选择的秘密问题方法。
但是,由于电子邮件不安全,通过电子邮件发送的密码(临时或非临时密码)很容易受到攻击。
问题总结
考虑到内部操作限制(多人单次登录),这些想法中的哪一个是最安全和用户友好的选择?或者,两者都不够?
编辑
堆栈溢出可以通过评估答案来帮助我吗?下面表达的意见很少,但SO没有任何迹象表明答案的质量。