gpt4 book ai didi

c# - 为什么我在 ASP.NET Identity 中收到用于电子邮件验证的零星无效 token ?

转载 作者:太空狗 更新时间:2023-10-29 22:37:01 26 4
gpt4 key购买 nike

我想弄清楚为什么我的用户在确认他们的电子邮件时经常收到无效 token 。我无法重现该问题。

这是设置:

userManager.UserTokenProvider = new EmailTokenProvider<User>();

token 的生成方式如下:

var code = await userManager.GenerateEmailConfirmationTokenAsync(user.Id);

验证方法如下:

var result = await userManager.ConfirmEmailAsync(user.Id, code);

据我了解 EmailTokenProvider使用安全戳进行失效。我的理解是,只有在对用户实体进行重大更改(如更改密码或用户名)时,此标记才会更改。但是,我收到无效 token 的频率更高,因为这是唯一的解释。

我正在寻找任何可以帮助我阐明发生这种情况的原因的指针。

编辑:

我仔细研究了源代码(文档很差),正如@trailmax 在下面指出的那样 EmailTokenProvider这个用例是错误的。它基于 TotpSecurityStampBasedTokenProvider将 token 超时硬编码为 3 分钟!

最佳答案

EmailTokenProvider 生成非常短暂的 token ,看起来像 6 位数字。此 token 旨在成为 2FA,并且仅在短时间内有效(大约 10-15 分钟,不知道实际值)。

你能做的最好的事情就是使用身份提供的 DataProtectorTokenProvider这有点棘手,因为要从 OWIN 手中夺走它并不简单。

我绕过它的方法是在我的 Start.Auth.cs 中分配静态变量,然后在 UserManager 中重用它:

public class AuthConfig
{
public static IDataProtectionProvider DataProtectionProvider { get; set; }

public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
}

public void ConfigureAuth(IAppBuilder app)
{
DataProtectionProvider = app.GetDataProtectionProvider();

// do other configuration
}
}

然后在 UserManager 的构造函数中重新分配它:

        var dataProtectorProvider = AuthConfig.DataProtectionProvider;
var dataProtector = dataProtectorProvider.Create("My Asp.Net Identity");
this.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser, Guid>(dataProtector)
{
TokenLifespan = TimeSpan.FromHours(24),
};

通过这种方式,您可以获得持续 24 小时的非常长的电子邮件 token 。

我也犯过和你一样的错误,但由于用户投诉,我不得不尽快改正。

关于c# - 为什么我在 ASP.NET Identity 中收到用于电子邮件验证的零星无效 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27367549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com