authentication - 用户在忘记密码过程开始时登录,让我进入?
问题描述
我正在实施“忘记密码”。我的身份验证是通过 jwt 访问令牌。(用户登录,获取访问令牌,将其与其余 api 调用一起发送)。
所以假设当前没有登录的用户,点击“忘记密码”。我为他创建了一些哈希令牌,然后给他发了一封邮件。如果他点击它,我将解码,向他显示更改密码,并创建一个新的访问令牌,就像这是主要思想,一切都很好。
我的问题是针对这种情况:用户点击忘记密码,输入他的邮件,我给他发了一封邮件,但是他没有点击 url 并重置,而是通过他的密码登录。
- 我应该让他登录吗?创建一个访问令牌,一切都好吗?从已发送邮件中重置令牌时(或者它仍然是重置密码的有效令牌吗?)
- 显示一些错误,说转到您的邮件并继续忘记密码过程?
我的问题来自安全方面,因为也许一个用户认为他的密码被泄露了,然后如果我让他进入,那么也许得到密码的人(不是用户)仍然可以登录/更改密码 - 而原始用户转到邮件并认为他处理了该过程。
我知道这可能是一种罕见的比赛条件,但我想避免它。
(另外,如果我让他进来,然后他点击已经发送的邮件中的 url,我应该重置它吗?在我的场景中,也许最好不要重置?或者如果用户点击两次“忘记密码”我应该创建 2 个不同的令牌,只接受后者吗?)
ii 真的很想得到一个建议,如何处理这种情况,都忘记了密码相关。
谢谢。
解决方案
我不是专家。这只是我的看法:
“忘记密码”功能不应使旧密码无法使用,因为其他人可能会调用此过程来阻止帐户所有者登录。您可能需要相当长的时间才能意识到电子邮件,并且会引起很多头痛。
当有人在短时间内请求多封电子邮件时,它们应该都可以正常工作。通常情况下,邮件服务器会花时间,而人们并不以耐心着称,因此他们会单击两次按钮,但会使用到达收件箱的第一个链接。
这都是关于可用性的。
现在到安全性:当有人登录时,电子邮件也应该保持活动状态。正如你提到的,恶意行为者可能会登录,否则会阻止所有者以这种方式更改密码。
推荐阅读
- angular - 修复了 mat-sidenav-content 中的元素
- python - 有没有办法在不使用 HTML/CSS 元素的情况下跟踪 Selenium 中的上传进度?
- r - 按列中的相对差异分组(考虑数据的排序方式)
- terraform - TF 0.12.13 中的 azurerm_client_config 数据提供程序是否损坏?
- javascript - 在 SQl 中格式化数字以通过 Google 图表工具提示栏显示的最佳方法?
- javascript - 访问数组的子元素(Javascript)
- vb.net - 如何在VB中使用现有的文本+字符重命名文件
- python - Python - 遍历数据框行以从日期时间戳中删除时间
- html - 子菜单不会在父菜单下完全打开
- c# - Microsoft.AspNetCore.SignalR.Client 1.0.1 与 uap10.0.15063 不兼容