ASP.NET 双重身份代码的最长有效期是多少?
What is max expiry for ASP.NET Identity Two Factor code?
我正在尝试从 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 年了,所以我想我会从一个极限点问在我尝试根据该答案更改它之前的观点。
看起来答案是否定的,我无法更改该代码的到期时间。
底层令牌提供者是 TotpSecurityStampBasedTokenProvider
,它使用 Rfc6238AuthenticationService
,如果我没看错的话,它在内部将到期时间硬编码为 3 分钟,最多 90 秒方差。
我认为我更改的过期时间只是更改了包含双因素代码的 cookie 上的过期时间,而不是代码过期时间本身。我们验证了这一点,因为当使用有效 cookie 的代码过期时返回的错误消息不同于使用过期代码和过期 cookie 返回的错误消息。
我只是觉得非常令人失望,因为在 UseTwoFactorSignInCookie
调用的帮助文本中没有更好地解释这一点。
你是对的,你写的代码只改变了 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)
};
}
然而这还不够。您还必须更改 cookie 超时,就像您在问题中所写的那样,在您的启动文件中如下所示:
UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(10));
这对我有用。
我正在尝试从 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 年了,所以我想我会从一个极限点问在我尝试根据该答案更改它之前的观点。
看起来答案是否定的,我无法更改该代码的到期时间。
底层令牌提供者是 TotpSecurityStampBasedTokenProvider
,它使用 Rfc6238AuthenticationService
,如果我没看错的话,它在内部将到期时间硬编码为 3 分钟,最多 90 秒方差。
我认为我更改的过期时间只是更改了包含双因素代码的 cookie 上的过期时间,而不是代码过期时间本身。我们验证了这一点,因为当使用有效 cookie 的代码过期时返回的错误消息不同于使用过期代码和过期 cookie 返回的错误消息。
我只是觉得非常令人失望,因为在 UseTwoFactorSignInCookie
调用的帮助文本中没有更好地解释这一点。
你是对的,你写的代码只改变了 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)
};
}
然而这还不够。您还必须更改 cookie 超时,就像您在问题中所写的那样,在您的启动文件中如下所示:
UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(10));
这对我有用。