扩展基于SMS OTP的登录的身份

时间:2019-10-07 04:53:03

标签: authentication .net-core asp.net-identity

我试图使用asp.net核心身份实现为我的应用使用SMS OTP进行一次注册验证和每日登录。

  

这是一次令牌,如果不使用,则应在15分钟内过期

     

如果过期或丢失,用户应再次请求

四处搜索,所有实施都提供了有关MFA或基于Google Authenticator的验证的详细信息,但这种情况略有不同。

  

服务器(而不是Authenticator应用)不会生成令牌。

     

我需要存储令牌及其在时间生成的令牌。

     

令牌将是6位数的短信。

该场景与password less auth mentioned here更为相似,但是这种情况下的令牌没有存储,我需要使用Validity来存储它,不确定如何扩展.net核心身份以进行匹配高于要求。

这是电话号码身份验证的相当标准的方式

我知道这不是标准的SO格式,但是我从何处开始迷茫了

1 个答案:

答案 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);

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.usermanager-1.generatechangephonenumbertokenasync

VerifyChangePhoneNumberTokenAsync

 bool valid = await _userManager.VerifyChangePhoneNumberTokenAsync(user, code, model.PhoneNumber);

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.usermanager-1.verifychangephonenumbertokenasync


这可以在Erik&paulsm4发布的文档中看到实现

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/2fa?view=aspnetcore-1.1&viewFallbackFrom=aspnetcore-3.1

代码链接 https://github.com/dotnet/AspNetCore.Docs/tree/master/aspnetcore/security/authentication/2fa/sample/Web2FA

到实现此功能的控制器的链接 https://github.com/dotnet/AspNetCore.Docs/blob/master/aspnetcore/security/authentication/2fa/sample/Web2FA/Controllers/ManageController.cs