我试图找出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岁了,所以我想问一下在我根据答案尝试改变它之前限制观点。
答案 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));
这对我有用。