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

时间:2015-08-21 12:16:45

标签: 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"

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

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

要通过安全检查,链接至少应该过期。

如何实现这一目标?

3 个答案:

答案 0 :(得分:4)

控制令牌的生命周期,转到 IdentityConfig.cs ,然后转到创建函数的结尾,在最后一个与相关的内容中dataProtectionProvider 你可以设置时间,看:

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

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

答案 1 :(得分:2)

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

IUserTokenProvider分配给UserTokenProvider的{​​{1}}属性时,可以设置重置令牌过期时间。

UserManager包中找到IUserTokenProvider的一个很好的例子DataProtectorTokenProvider。此类使用前面提到的基于安全标记的标记,并允许使用Microsoft.AspNet.Identity.Owin属性设置过期时间。有关如何实现此check out this answer

的信息

答案 2 :(得分:2)

默认情况下,令牌有效期为一天。但是,您可以通过在App_Start \ IdentityConfig.cs文件中自定义Create方法来更改它

if (dataProtectionProvider != null)
{
   manager.UserTokenProvider =
   new DataProtectorTokenProvider<ApplicationUser>
      (dataProtectionProvider.Create("ASP.NET Identity"))
      {                    
         TokenLifespan = TimeSpan.FromHours(3)
      };
}

使用上面的代码,忘记的密码和电子邮件确认令牌将在3小时后过期。

确保您的应用程序可以让用户重新生成令牌。我添加了一个重新发送链接按钮。它链接到重新生成令牌并将链接发送给用户的函数。

您将在此处了解更多详情:http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity