我试图使用asp.net核心身份实现为我的应用程序植入一次性注册验证&使用短信OTP每日登录。
这是一个一次性的令牌,如果不使用,15分钟后就会失效。
如果过期或丢失,用户应再次申请。
搜索了一下,所有的实现都提供了关于MFA或基于Google Authenticator的验证的细节,而这个场景略有不同。
Token不会由服务器生成,也不会由Authenticator应用生成。
我需要存储token以及它的生成时间。
Token将是6位数的短信。
这个场景更类似于 password less auth
此处但在这种情况下,token是不被存储的,我需要存储它的有效性,不知道如何扩展.net核心身份以满足上述要求。
这是相当标准的电话号码认证方式
我知道这不是一个标准的SO格式,但我不知道从哪里开始。
我知道这是一个老问题,但我发现自己在这里遇到了同样的问题,而且关于这个问题的信息出奇的少。很可能像微软推荐使用(2FA)身份验证器应用,使用基于时间的一次性密码算法(TOTP),而不是SMSEmail的OTP。
虽然不是预期的目的,但以下内容将允许您生成并保存一个有时间限制(15分钟)的6位OTP,将其与用户相关联,然后使用它来使用ASP.NET Core Identity验证用户。
生成更改电话号码令牌的异步操作。
var code = await _userManager.GenerateChangePhoneNumberTokenAsync(user, model.PhoneNumber);
和
验证更改电话号码令牌Async
bool valid = await _userManager.VerifyChangePhoneNumberTokenAsync(user, code, model.PhoneNumber);
在Erik & paulsm4发布的文档中可以看到正在实现这个功能。
代码链接https:/github.comdotnetAspNetCore.Docstreemasteraspnetcoresecurityauthentication2fasampleWeb2FA。
连接到实现该功能的控制器的链接https:/github.comdotnetAspNetCore.Docsblobmasteraspnetcoresecurityauthentication2fasampleWeb2FAControllersManageController.cs。