You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core Identity:DefaultEmailProvider令牌过期时间及修改问询

ASP.NET Identity 6位邮件令牌的过期时间与自定义配置

嘿,我来帮你理清这个问题,结合你的配置和遇到的情况,咱们一步步说:

一、当前令牌的过期逻辑

你现在生成的6位码,应该是用了TotpSecurityStampBasedTokenProvider(就是默认给短信验证用的短令牌提供者,你通过配置把它套用到了邮件验证上)。它的默认规则是:

  • 令牌本身的有效时长是3分钟(每3分钟会生成全新的6位码)
  • 验证时默认允许一定的时钟偏差(你看到的文档说“不超过9分钟的双向偏差”,意思是服务器会容忍客户端和服务器时间有±4.5分钟的误差,加起来就是9分钟的验证窗口)

你遇到的8分钟就过期,刚好是3分钟的令牌有效期加上4.5分钟的偏差,接近8分钟时就超出了验证窗口,所以会提示过期。

二、怎么查看/修改过期时长

如果你想调整这个有效期,有两种方式可以实现:

方式1:自定义令牌提供者(推荐,可单独配置邮件验证)

这种方法可以只针对邮件确认/密码重置的令牌做配置,不影响其他验证场景:

首先,修改你的Identity注册代码,指定自定义的令牌提供者:

services.AddIdentity<User, IdentityRole>(config => { 
    config.SignIn.RequireConfirmedEmail = true; 
    // 给邮件确认和密码重置指定自定义的令牌提供者名称
    config.Tokens.EmailConfirmationTokenProvider = "CustomEmailTotpProvider";
    config.Tokens.PasswordResetTokenProvider = "CustomEmailTotpProvider";
})
.AddRoleManager<RoleManager<IdentityRole>>()
.AddEntityFrameworkStores<MyDbContext>()
// 添加自定义的Totp令牌提供者
.AddTokenProvider<CustomEmailTotpTokenProvider<User>>("CustomEmailTotpProvider");

然后,实现这个自定义的令牌提供者,重写有效期:

public class CustomEmailTotpTokenProvider<TUser> : TotpSecurityStampBasedTokenProvider<TUser> 
    where TUser : class
{
    public CustomEmailTotpTokenProvider(IOptions<TotpTokenProviderOptions> options) : base(options)
    {
        // 把默认的3分钟有效期改成你想要的时长,比如10分钟
        this.TokenLifespan = TimeSpan.FromMinutes(10);
    }
}

方式2:全局配置Totp选项(影响所有短令牌场景)

如果你想让所有使用短令牌的地方(比如短信验证)都用同一个有效期,可以直接配置TotpTokenProviderOptions:

services.Configure<TotpTokenProviderOptions>(options =>
{
    // 设置令牌有效期为15分钟
    options.TokenLifespan = TimeSpan.FromMinutes(15);
});

三、关于时钟偏差的调整

如果你觉得默认的9分钟双向偏差不够用,也可以调整这个值——不过这个是全局的,会影响所有使用DataProtection的功能:

services.AddDataProtection()
    // 设置为±10分钟的时钟偏差,总共20分钟的验证窗口
    .SetDefaultClockSkew(TimeSpan.FromMinutes(10));

这样调整后,即使客户端和服务器时间差了10分钟,令牌依然能通过验证。


内容的提问来源于stack exchange,提问作者Davide Quaglio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:52:46