【发布时间】:2021-08-30 21:12:56
【问题描述】:
我正在尝试验证用户的电子邮件确认令牌,但无论我做什么,总是收到 INVALID TOKEN 错误。
我的代码很简单
生成令牌
EmailVerificationCode = await userManager.GenerateEmailConfirmationTokenAsync(user);
EmailVerificationHTMLFormatCode = HttpUtility.UrlEncode(EmailVerificationCode);
验证令牌
var result = await userManager.ConfirmEmailAsync(user, code);
我总是收到 INVALID TOKEN 错误。
我尝试过的事情
- 通过将生成的令牌和接收的令牌放入数据库进行验证,它们完全相同。
- 尝试使用
HttpUtility.UrlDecode(Code)在接收端解码令牌 - 试图只使用没有
HttpUtility.UrlEncode的RAW令牌来验证它
我也经历了以下解决方案
- Asp.net 2.0 Identity, ConfirmEmailAsync() getting Invalid Token
- Invalid Token. while verifying email verification code using UserManager.ConfirmEmailAsync(user.Id, code)
- AspNet.Identit 2.1.0 ConfirmEmailAsync always returns Invalid token
- Asp.NET Identity 2 giving "Invalid Token" error
无论我做什么,它总是一个无效的令牌,我可以清楚地看到令牌是 100% 正确的。
知道我做错了什么吗?
编辑 - 如果这有帮助,我的 Startup.cs 具有以下身份配置
// For Identity
services.AddIdentity<ApplicationUser, IdentityRole>(o =>
{
// configure identity options
o.Password.RequireDigit = false;
o.Password.RequireLowercase = false;
o.Password.RequireUppercase = false;
o.Password.RequireNonAlphanumeric = false;
o.Password.RequiredLength = 6;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
【问题讨论】:
-
您是否在多服务器环境中运行?您是否实施了数据保护存储库?
-
等等。我刚刚注意到您的标签中有 2/3 是 ASP.NET,并且您链接的所有问题都是 ASP.NET。是不是 ASP.NET Core 标签错误?
-
@Llama 道歉,标签已更正,它是
asp.net core- 不,我正在运行单个服务器环境,实际上只是 azure 上的一个应用程序。但无论我在哪里运行,Localhost 或 Azure,结果都是一样的。data protection repository对我来说是全新的,我需要实现它吗?我在 Postman 中尝试过,它总是无法验证令牌。此外,如果这有帮助,手机号码验证(使用 PIN 码)就可以正常工作,只是电子邮件代码不起作用。 -
令牌基本上是加密的。如果应用程序在此期间重新启动,并且设置不正确,那么它可能会生成新的加密密钥,而您无法再次解密它们。看起来你可以使用KeyVault。
-
嗨@Llama,我看了看,这是我们将在未来实施的东西,现在我们希望将其保持为默认值。在我尝试验证电子邮件地址时,该应用程序尚未重新启动或重新部署(或进入睡眠状态等)。还有什么可能导致加密密钥重置?
标签: c# asp.net-core asp.net-core-webapi asp.net-core-identity