Identity Server 4 / ASP.NET身份-自定义两因素身份验证提供程序

时间:2019-12-09 16:22:10

标签: c# asp.net-identity identityserver4 asp.net-core-2.2

我一直在研究创建可输出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);
    }
}

0 个答案:

没有答案