我想将此功能添加到我的应用程序中。它工作正常,但我担心这里有问题。首先,我将谈谈我如何实现该功能。简单地说,用户必须先注册他的电子邮件地址(在注册时)。如果他丢失了密码,他可以点击一个链接来激活发件人。该发件人会将密码(对应于他的用户名)发送到他注册的电子邮件地址。我认为这里应该有多种发件人,我正在使用 SmtpClient 发送电子邮件。这个 Smtp 需要一个 NetworkCredential,我为它提供了一些有效且活动的 Credential。我必须创建一些用户帐户(在 Gmail 和 Yahoo 网络中),应用这些帐户信息作为我的 Smtp 的凭据。
这是问题所在,如果所有这些凭据都无效或不活动,我的密码恢复功能将不起作用。我的意思是,如果所有用户帐户(我在 Gmail 和 Yahoo 邮件中创建)以某种方式处于非活动状态,则 Smtp 将无法发送电子邮件。这些帐户处于非活动状态的最常见原因是很长一段时间没有访问/登录它们(例如:大约 3 个月)几乎可以肯定它会发生,除了我必须提醒自己登录这些帐户定期保持活跃。
我想知道是否有任何解决方案?我曾考虑将这些帐户信息保存在配置文件中,但客户不知道如何编辑该配置文件以更改发件人凭据信息,即使他们知道如何更改,这太不方便了。我还想过弹出一个窗口,要求用户提供发件人凭据的信息(用户可以使用自己的电子邮件帐户或必须创建一个新帐户),我认为这也很不方便。我还考虑定期(大约每月一次)登录这些帐户(通过我的应用程序)以保持它们活跃。但是我想知道是否有更好的解决方案,加上需要用户计算机连接到互联网,这并不总是能满足(甚至有一种情况,用户计算机总是离线数月或数年,但突然有一天,
您对如何解决此问题有任何想法吗?
更新
我很抱歉谁建议我这里有一个安全漏洞,但我只是想要一个密码恢复的解决方案。如果您足够好心,请让我知道详细的安全漏洞是什么。正如我上面提到的,当然存在安全漏洞,因为用户密码(纯文本)保存在内存中。但这只是一个演示,仅用于演示我的真正问题,即向用户发送新密码(或任何类型的权威访问信息)。以下是我想进一步解释的内容:
- 假设用户的密码是:Iloveprogramming
- 哈希后应该是 3920bdbd4c000dd392e2501e89747173
- 这就是我的应用程序所知道的关于用户访问信息的全部内容。
当用户正确输入他的密码时,输入的密码应该被散列到上面的相同字符串中,这将与存储在数据库中的散列字符串进行比较,他应该登录。
现在如果他忘记了密码,我该怎么办?
这是大多数网站为我们做的事情(不幸的是,他们忘记了我们的密码):
- 支持“忘记密码?”之类的链接。
- 单击链接将引导您进入如下页面:
-> 提供您的用户名:......
-> 单击确定(或任何提交按钮)以获取您的新密码。
我想对我的应用程序做同样的事情。这是一个 Windows 窗体应用程序。我知道发送到用户电子邮件地址的内容应该只是一些确认链接(关于密码恢复),而不是密码(这只有使用密码发送到的电子邮件的用户知道,但是其他用户可能会打扰点击“忘记密码”链接并填写他的用户名)。但这只是多用户应用程序的必做之事,我的应用程序实际上只供 1 个用户在他自己的机器上使用。缺陷是什么?
这是我打算做的:
- 自动生成密码,对该密码进行散列处理,并将该散列字符串作为新的散列密码保存到数据库中。之后,立即将此自动生成的密码发送到他的电子邮件地址。
- 处理存储新生成密码的字符串。
这里有什么缺陷?如果确实存在,请让我知道另一种解决方案?我只是担心用于将密码发送到我用户的电子邮件地址的电子邮件帐户将来可能由于某种原因(如我所说,很长时间没有登录)无法工作(不活动)。
请随时在答案中解释缺陷细节,它可能无法回答我原来的问题,但它确实对我有帮助,我会接受这个答案。谢谢!
同样,我没有钱为我的 winforms 应用程序的密码恢复功能建立一个专门的网站。