如何设置使用 asp 身份生成的密码重置 link 的有效时间
How to set the valid time for a password reset link generated with asp indentiy
对于我们的新项目,我们希望尽可能多地利用 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"
在我们以前的自己开发的应用程序中,我们确保重置 links 只能使用一次,并且它们会在一天左右的时间内过期。
AspNet.Identiy 是否支持类似的东西?我在文档中找不到它。
要通过我们的安全检查,link 至少应该过期。
如何做到这一点?
ASP.NET 身份默认根据现有用户属性生成重置令牌。这意味着当这些属性发生变化时,重置令牌将自动失效。这将满足您的一次性使用要求(当他们使用令牌并重置密码时,令牌将不再有效)。
当您将 IUserTokenProvider
分配给 UserManager
的 UserTokenProvider
属性 时,可以设置重置令牌过期时间。
IUserTokenProvider
的一个很好的例子是 Microsoft.AspNet.Identity.Owin
包中的 DataProtectorTokenProvider
。 class 使用前面提到的基于安全戳的令牌,并允许使用 TokenLifespan
属性 设置过期时间。有关如何实施此 check out this answer.
的信息
控制token的生命周期,进入IdentityConfig.cs,下一步,Create函数结束,最后if里面的dataProtectionProvider可以设置时间,看:
if (dataProtectionProvider != null)
{
manager.UserTokenProvider =
new DataProtectorTokenProvider<ApplicationUser>(
dataProtectionProvider.Create("ASP.NET Identity")){
**TokenLifespan = TimeSpan.FromMinutes(1)**
};
}
使用 TokenLifespan = TimeSpan.FromMinutes(1)(或您需要的时间)
默认情况下,令牌有效期为一天。但是,您可以通过在 App_Start\IdentityConfig.cs 文件
中自定义 Create 方法来更改它
if (dataProtectionProvider != null)
{
manager.UserTokenProvider =
new DataProtectorTokenProvider<ApplicationUser>
(dataProtectionProvider.Create("ASP.NET Identity"))
{
TokenLifespan = TimeSpan.FromHours(3)
};
}
使用上面的代码,忘记的密码和电子邮件确认令牌将在 3 小时后过期。
请确保您的应用程序可以让用户重新生成令牌。我添加了一个重新发送 Link 按钮。它 links 到重新生成令牌并向用户发送 link 的函数。
您将在此处获得更多详细信息:http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-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"
在我们以前的自己开发的应用程序中,我们确保重置 links 只能使用一次,并且它们会在一天左右的时间内过期。
AspNet.Identiy 是否支持类似的东西?我在文档中找不到它。
要通过我们的安全检查,link 至少应该过期。
如何做到这一点?
ASP.NET 身份默认根据现有用户属性生成重置令牌。这意味着当这些属性发生变化时,重置令牌将自动失效。这将满足您的一次性使用要求(当他们使用令牌并重置密码时,令牌将不再有效)。
当您将 IUserTokenProvider
分配给 UserManager
的 UserTokenProvider
属性 时,可以设置重置令牌过期时间。
IUserTokenProvider
的一个很好的例子是 Microsoft.AspNet.Identity.Owin
包中的 DataProtectorTokenProvider
。 class 使用前面提到的基于安全戳的令牌,并允许使用 TokenLifespan
属性 设置过期时间。有关如何实施此 check out this answer.
控制token的生命周期,进入IdentityConfig.cs,下一步,Create函数结束,最后if里面的dataProtectionProvider可以设置时间,看:
if (dataProtectionProvider != null)
{
manager.UserTokenProvider =
new DataProtectorTokenProvider<ApplicationUser>(
dataProtectionProvider.Create("ASP.NET Identity")){
**TokenLifespan = TimeSpan.FromMinutes(1)**
};
}
使用 TokenLifespan = TimeSpan.FromMinutes(1)(或您需要的时间)
默认情况下,令牌有效期为一天。但是,您可以通过在 App_Start\IdentityConfig.cs 文件
中自定义 Create 方法来更改它if (dataProtectionProvider != null)
{
manager.UserTokenProvider =
new DataProtectorTokenProvider<ApplicationUser>
(dataProtectionProvider.Create("ASP.NET Identity"))
{
TokenLifespan = TimeSpan.FromHours(3)
};
}
使用上面的代码,忘记的密码和电子邮件确认令牌将在 3 小时后过期。
请确保您的应用程序可以让用户重新生成令牌。我添加了一个重新发送 Link 按钮。它 links 到重新生成令牌并向用户发送 link 的函数。
您将在此处获得更多详细信息:http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity