我在ApiController中生成自定义用户令牌,并使用
通过回调链接将其通过电子邮件发送给用户var token = userManager.GenerateUserToken(user.Id, "ConfirmAction");
var callbackUrl = this.Url.Link("Default", new { controller = "AccountController", action = "ActionXYZ", new { userId = user.Id, token = token} });
当用户单击链接时,我使用
在MVC控制器中处理它var validToken = await userManager.VerifyUserTokenAsync(user.Id, "ConfirmAction", token);
if(validToken)
{
// Can token be cancelled to disallow re-use?
}
有没有办法在不将令牌保存在数据库中的情况下多次阻止令牌被使用?例如某种特定令牌的某种早期到期?
答案 0 :(得分:2)
是的,您可以,例如,您希望向用户发送密码重置的链接,并且您希望用户仅使用该链接一次,首先您需要根据将在以后更改的数据创建令牌用户单击该链接,例如,如果用户想要更改密码,请使用旧密码或上次用户作为令牌的一部分登录(使用某些安全密钥生成旧密码的哈希盐渍字符串后,令牌),所以如果用户点击链接并更改密码,旧令牌将不再有效,因为您将其有效性与当前密码(已经更改)进行比较。 如果您需要有关如何创建哈希密码
的帮助,请在Stackoverflow上check this question