【问题标题】:Can Asp.Net MVC tokens be restricted to one-time use可以将 Asp.Net MVC 令牌限制为一次性使用吗
【发布时间】:2017-11-04 21:48:37
【问题描述】:

我在 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?

}

有没有办法防止令牌被多次使用而不将令牌保存在数据库中?例如,特定令牌的某种提前到期?

【问题讨论】:

  • 您是否再次尝试重用相同的令牌?成功了吗?
  • 是的,该链接可以多次使用,最长可达 24 小时。然后它会在 24 小时后过期。但是,我只希望链接只工作一次。

标签: c# asp.net-mvc token


【解决方案1】:

是的,你可以,例如你想给用户一个密码重置链接,并且你希望用户只使用一次链接,首先你需要创建一个基于数据的令牌,该令牌将在之后更改用户点击了链接,例如,如果用户想要更改密码,使用旧密码或上次用户登录作为令牌的一部分(在使用一些安全密钥生成旧密码的散列盐化字符串后包含在令牌),因此如果用户单击链接并更改密码,旧令牌将不再有效,因为您会将其有效性与当前密码(已更改)进行比较
如果您需要有关如何创建哈希盐密码的帮助,请在 Stackoverflow 上 check this question

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 2011-06-10
    • 1970-01-01
    • 2018-07-07
    • 2020-05-02
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多