【问题标题】:ASP.NET Identity 2 GenerateEmailConfirmationTokenAsync(user.Id) is there a timeout for the link generated?ASP.NET Identity 2 GenerateEmailConfirmationTokenAsync(user.Id) 生成的链接是否超时?
【发布时间】:2018-08-14 01:52:11
【问题描述】:

我在我的 MVC 5 程序中使用最新的 Identity 2 包。

当用户注册时,在 Account 控制器的 Register 方法中。它会向用户的电子邮件帐户发送一封电子邮件,其中包含用于验证帐户的链接。

我发现如果我创建一个虚拟用户并立即检查我的电子邮件以注册帐户,它就会成功验证。

如果我等待点击电子邮件中的链接,我得到的只是 错误。 处理您的请求时出错。

此电子邮件链接是否超时?如果是这样,是否有延长此链接的超时时间?

【问题讨论】:

  • 根据asp.net/identity/overview/features-api/…默认的TokenLifespan是1天。
  • tech.trailmax.info/2015/05/… 提到了发生此问题的可能原因...令牌是 Base64 字符串。 Base64 字符串作为 URL 参数传递是不安全的,因为特殊字符可能会被浏览器错误地解释。因此,您需要对它们进行 url 编码以避免对令牌的误解:
  • 他是对的。令牌字符串被转换为 base 64,然后在验证时从 base64 解码。我之前对默认令牌寿命的看法是错误的。对字符串进行编码是否解决了问题?
  • 在过去 36 小时内离开我的代码。我明天回家时必须申请它,然后看看。
  • 我能够在我正在使用的模板文件中验证,令牌代码没有被 url 编码。这可能就是为什么单击电子邮件链接时只是发回错误的原因。

标签: asp.net-mvc-5 asp.net-identity email-confirmation


【解决方案1】:

由于这里没有人提供答案,我会的。 OP 的问题是没有对生成的令牌进行 URL 编码。

 var code = Url.Encode(await UserManager.GenerateEmailConfirmationTokenAsync(userId))

var code  = HttpUtility.UrlEncode(await UserManager.GenerateEmailConfirmationTokenAsync(userId))

如果您正在编码,请检查寿命。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多