authentication - 为基于 SMS OTP 的登录扩展身份
问题描述
我试图使用 asp.net 核心身份实现为我的应用程序使用 SMS OTP 实现一次注册验证和每日登录。
它是一次性令牌,如果不使用应在 15 分钟后过期
如果过期或丢失,用户应再次请求
搜索它,所有实现都提供了有关 MFA 或基于 Google Authenticator 的验证的详细信息,但这种情况略有不同。
Token 不会由服务器生成,也不会由 Authenticator 应用程序生成。
我需要存储令牌及其生成的时间。
令牌将是 6 位数的 SMS。
password less auth
该场景与此处提到的更相似,但是这种情况下的令牌没有存储,我需要将其与 Validity 一起存储,不知道如何扩展 .net 核心身份以匹配上述要求。
这是相当标准的电话号码认证方式
我知道这不是标准的 SO 格式,但我不知从何开始
解决方案
我知道这是一个老问题,但我发现自己在这里遇到了同样的问题,而且关于这方面的信息非常少。可能正如 Microsoft 建议使用 (2FA) 身份验证器应用程序一样,使用基于时间的一次性密码算法 (TOTP) 而不是带有 SMS/电子邮件的 OTP。
不是预期目的,但以下内容将允许您生成和保存限时(3 分钟)的 6 位数 OTP,将其与用户相关联,然后使用 ASP.NET Core 身份验证他们。
GenerateChangePhoneNumberTokenAsync
var code = await _userManager.GenerateChangePhoneNumberTokenAsync(user, model.PhoneNumber);
和
验证更改电话号码令牌异步
bool valid = await _userManager.VerifyChangePhoneNumberTokenAsync(user, code, model.PhoneNumber);
这可以在 Erik & paulsm4 发布的文档中看到
推荐阅读
- data-binding - 解决从 WSDL 转换为 Java 时类名中的冲突
- mysql - 拥有可以访问的存档的最佳方式
- sql - 如何将 SQL Server 表中的数据附加到 Access 表中?
- javascript - 在页面中添加水印
- javascript - Date.prototype.toLocaleTimeString() 中的 hourCycle 选项有什么区别
- javascript - 为什么这个变量不会在它的 innerHTML 中显示它的数字?
- typescript - 一种忽略命名空间内容的方法:类和变量
- php - preg_replace 与回调不替换?
- javascript - 在滚动时将 div 捕捉到页面顶部时出现问题
- sql - 在 SQL 中复制 VBA 解决方案