你的网站还在用电子邮件发送密码通知吗? 密码通常可以保存为纯文本格式,也可以解密,而不是使用更强大、更安全的单向加密。
如果APP jdhmgsjx的用户忘记了密码,则可以安全地重置密码。 如何回家使用JSON网络令牌(JWT )生成URL安全令牌,以完成安全密码重置? JWT包含有关用户的编码信息和签名,并在解码时进行验证以确保令牌没有被篡改。
一旦通过JWT验证,APP应用程序就不再以电子方式发送给用户,而是允许用户生成新密码。
由于“安全性”密码无法解密,因此如果用户忘记了密码,请选择以下两个常用选项之一:
生成新的临时密码,并通过电子邮件发送。 生成在电子邮件内容中包含一次性链接的电子邮件。 使用此链接,用户将转至可以输入新安全密码的页面。 两个选项都发送电子邮件。 从长远来看,不要将其视为安全的存储介质。 在第一个选项中,密码显示为纯文本。 如果用户记得自己收件箱里的电子邮件作为自己的密码,这几乎就是写自己的密码,=离开自己的电脑时不安全。
在可选的第二个密码重置问题中,恶意用户可以通过重置密码轻松地从网站锁定电子邮件地址的用户。 如果恶意用户多次重复此情况,则用户很少再次登录,因为密码永远不会更改。
上一篇文章中对jwt进行了说明,下面对正确使用jwt的方法进行说明。
为了简化JWT的生成,请使用一个名为JWT Simple的现有npm软件包。 这将混淆许多加密令牌和解密令牌的复杂性。
创建展示令牌编码和解码基础知识的新APP应用程序。
首先,请确认是否安装了Node.js .
我们的新APP被命名为“密码重置”。 在命令提示符下,通过执行以下命令创建基本APP :
mkdir密码重置
光盘密码重置
纳米单位
要在与APP应用程序相同的命令提示符下安装软件包,请键入以下命令:
NPM安装jwt -简单- -保存
创建了新的index.js文件,并创建了加密为JWT的JavaScript对象。
APP应用程序首先包含JWT Simple模块,然后创建要在令牌中编码的有效载荷对象。 您创建了一个包含单个属性userId的对象。 需要密钥来使用硬编码值1加密(和解密)令牌。
通过从JWT Simple模块中调用encode函数进行。 该函数的结果是编码头、有效载荷和签名。 最后一行将令牌输出到控制台。
执行APP时,将输出以下内容:
节点索引.日本
EY J0 EXAIOIJKV1QilcJHBGCIOIJIUZI1NiJ9. EY J1 C2 VySwQIOJF9. UK E3C zh _ G6 OHXLFSTQ1BL _ Q8 _ ZJKPYJ0DuvzKJSrkBG
让我们更新index.js
解码令牌并记录在控制台上的文件:
var解码=jwt .解码(token,secret );
控制台日志(解码;
接下来,执行APP时,将生成以下输出:
节点索引.日本
EY J0 EXAIOIJKV1QilcJHBGCIOIJIUZI1NiJ9. EY J1 C2 VySwQIOJF9. UK E3C zh _ G6 OHXLFSTQ1BL _ Q8 _ ZJKPYJ0DuvzKJSrkBG { userid 3601 }
的令牌已成功解码,包含userId属性,并具有正确的值1。
如果令牌被篡改,并且三个部分都无法解码和解码,JWT Simple模块将抛出异常。
以下代码示例将在重设密码时使用JWT来使用完整的index.js
JT提供了URL安全令牌,可以通过防止恶意用户在安全生成时轻易生成自己的令牌来实现更安全的密码重置过程。