如何为asp indentiy生成的密码重置链接设置有效时间

k.c*_*.c. 5 asp.net-mvc-5 asp.net-identity

对于我们的新项目,我们希望尽可能多地利用 asp.net mvc 5。这包括使用 AspNet.Identity 工具集进行用户管理。

我们正在使用以下版本:

  "Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net46" 
  "Microsoft.AspNet.Identity.EntityFramework" version="2.2.1" targetFramework="net46"
Run Code Online (Sandbox Code Playgroud)

在我们之前推出自己的应用程序中,我们确保重置链接只能使用一次,并且它们会在一天左右的时间内过期。

AspNet.Identity 是否支持类似的东西?我在文档中找不到它。

为了通过我们的安全检查,链接至少应该过期。

如何做到这一点?

Jul*_*eda 5

控制token的生命周期,去IdentityConfig.cs,next,最后的Create函数,最后如果与dataProtectionProvider相关你可以设置时间,看:

 if (dataProtectionProvider != null)
            {
                manager.UserTokenProvider = 
                    new DataProtectorTokenProvider<ApplicationUser>(
                        dataProtectionProvider.Create("ASP.NET Identity")){
                        **TokenLifespan = TimeSpan.FromMinutes(1)**
                    };
            }
Run Code Online (Sandbox Code Playgroud)

使用TokenLifespan = TimeSpan.FromMinutes(1) (或您需要的时间)


Sco*_*ady 2

默认情况下,ASP.NET Identity 会根据现有用户属性生成重置令牌。这意味着当这些属性发生更改时,重置令牌将自动失效。这将满足您的一次性使用要求(当他们使用令牌并重置密码时,令牌将不再有效)。

当您将 分配给 的属性IUserTokenProvider时 ,可以设置重置令牌过期时间。UserTokenProviderUserManager

在包中IUserTokenProvider可以找到一个很好的例子。此类使用前面提到的基于安全标记的令牌,并允许使用该属性设置过期时间。有关如何实施此操作的信息,请查看此答案DataProtectorTokenProviderMicrosoft.AspNet.Identity.OwinTokenLifespan