我试图使用asp.net核心身份实现为我的应用使用SMS OTP进行一次注册验证和每日登录。
这是一次令牌,如果不使用,则应在15分钟内过期
如果过期或丢失,用户应再次请求
四处搜索,所有实施都提供了有关MFA或基于Google Authenticator的验证的详细信息,但这种情况略有不同。
服务器(而不是Authenticator应用)不会生成令牌。
我需要存储令牌及其在时间生成的令牌。
令牌将是6位数的短信。
该场景与password less auth
mentioned here更为相似,但是这种情况下的令牌没有存储,我需要使用Validity来存储它,不确定如何扩展.net核心身份以进行匹配高于要求。
这是电话号码身份验证的相当标准的方式
我知道这不是标准的SO格式,但是我从何处开始迷茫了
答案 0 :(得分:5)
我知道这是一个古老的问题,但是我在这里也遇到了同样的问题,有关此问题的信息令人惊讶地薄薄。就像Microsoft建议使用(2FA)身份验证器应用程序一样,使用基于时间的一次性密码算法(TOTP)而不是带有SMS / Email的OTP。
这不是预期的目的,但是,以下内容将允许您生成并保存限时(3分钟)的6位数OTP,将其与用户关联,然后使用它使用ASP.NET Core Identity进行验证。 / p>
GenerateChangePhoneNumberTokenAsync
var code = await _userManager.GenerateChangePhoneNumberTokenAsync(user, model.PhoneNumber);
和
VerifyChangePhoneNumberTokenAsync
bool valid = await _userManager.VerifyChangePhoneNumberTokenAsync(user, code, model.PhoneNumber);
这可以在Erik&paulsm4发布的文档中看到实现