对于我们的新项目,我们希望尽可能多地利用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是否支持类似的东西?我在文档中找不到它。
要通过安全检查,链接至少应该过期。
如何实现这一目标?
答案 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小时后过期。
确保您的应用程序可以让用户重新生成令牌。我添加了一个重新发送链接按钮。它链接到重新生成令牌并将链接发送给用户的函数。