ASP.NET Identity Two Factor代码的最大到期时间是多少?

时间:2016-06-28 17:42:25

标签: asp.net asp.net-identity two-factor-authentication

我试图找出ASP.NET Identity 2.1中双因素身份验证代码的最大值。

我尝试过设置以下内容:

app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(60))

但代码并不长,所以我想知道这可能是cookie本身的到期而不是它包含的代码。我想知道验证码可以持续多长时间存在技术限制,具体取决于验证码的生成方式。

所有的例子都坚持了5分钟,所以我想知道这是否是实际限制。我在某个地方看到,在5分钟的时间内还有90秒的额外补贴,所以这似乎与我所得到的一样。

我注意到这个问题(ASP.Net Identity 2, Two Factor Security Code timespan)希望做同样的事情,但是没有接受的答案,而且差不多已经有1.5岁了,所以我想问一下在我根据答案尝试改变它之前限制观点。

2 个答案:

答案 0 :(得分:3)

看起来答案是否定的,我无法更改该代码的到期日期。

底层令牌提供程序是TotpSecurityStampBasedTokenProvider,它使用Rfc6238AuthenticationService,如果我正确读取它,则在内部硬编码到期时间为3分钟,最多时间间隔为90秒。

我认为我改变的到期时间仅改变了包含双因素代码的cookie的到期日期,而不是代码到期日本身。我们验证了这一点,因为当代码在有效cookie到期时返回的错误消息与您使用过期代码和过期cookie返回的错误不同。

我认为在UseTwoFactorSignInCookie电话的帮助文本中没有更好地解释这是非常令人失望的。

答案 1 :(得分:0)

您说的是对的,您编写的代码只会更改Cookie超时。

您可以使用问题答案中的代码更改到期时间,或者类似地在UserManager Constructor执行此操作:

  IdentityFactoryOptions<UserManager> options = new IdentityFactoryOptions<UserManager>();
        var dataProtectionProvider = options.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            this.UserTokenProvider = new DataProtectorTokenProvider<AppUser>(dataProtectionProvider.Create("ASP.NET Identity"))
            {
                TokenLifespan = new TimeSpan(0,10,0)
            };
        }

然而,这还不够。您还必须在您的StartUp文件中更改cookie超时,就像您在问题中所写的那样:

UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(10));

这对我有用。