我一直在研究创建可输出6位代码的自定义提供程序的方法,但也使我们能够自定义默认2分钟以来,我们希望每个2FA代码有效的时间为90秒在我们的案例中有点棘手。
是的,我已经看到2FA令牌的3分钟/ 90秒寿命是设计使然/ RFC规范。
我在网上找到了一个小型教程,可以引导我创建以下类,并且我认为它可以与我的自定义TokenLifespan一起使用,除了它会生成一个长字符串(数字,字母和符号),而不是一个6位数的字符串代码。
我们当前的实现生成一个6位数的代码,并强制使用默认的3分钟/ 90秒方差生存期。
我是否错过了一些东西,可以让我们生成6位代码而不是30位以上的字符串来进行两因素身份验证,同时仍然允许我们增加2FA令牌的寿命?
public class MyLoginTokenProviderOptions : DataProtectionTokenProviderOptions
{
public MyLoginTokenProviderOptions()
{
// update the defaults
Name = "MyLoginTokenProvider";
TokenLifespan = TimeSpan.FromMinutes(200);
}
}
public class MyLoginTokenProvider<TUser> : DataProtectorTokenProvider<TUser> where TUser : class
{
public MyLoginTokenProvider(
IDataProtectionProvider dataProtectionProvider,
IOptions<MyLoginTokenProviderOptions> options):
base(dataProtectionProvider, options)
{
}
}
public static class MyIdentityBuilderExtensions
{
public static IdentityBuilder AddMyTokenProviders(this IdentityBuilder builder)
{
var userType = builder.UserType;
var dataProtectionProviderType = typeof(DataProtectorTokenProvider<>).MakeGenericType(userType);
var emailTokenProviderType = typeof(EmailTokenProvider<>).MakeGenericType(userType);
var myProvider = typeof(MyLoginTokenProvider<>).MakeGenericType(userType);
return builder
.AddTokenProvider(TokenOptions.DefaultProvider, dataProtectionProviderType)
.AddTokenProvider(TokenOptions.DefaultEmailProvider, emailTokenProviderType)
.AddTokenProvider("MyLoginTokenProvider", myProvider);
}
}