重置密码功能生成无效令牌

Reset Password Functionality generates an invalid token

我正在尝试在我的 Web API 中开发重置密码功能。电子邮件生成在 Rest Web 服务 (Web API) 中执行。一旦用户收到带有 link 的生成电子邮件,当他单击 link 时,用户应该被重定向到驻留在 MVC 网站中的 ResetPasswordPage(该网页不在 Web API 中)它位于我的同事开发的网站中)位于不同的端口。 当我单击 ResetPassword 页面时,它会打开 Reset Password 网页。然后我单击提交按钮,我收到一条 'Invalid Token' 消息。

Web API(REST Web Service)代码如下

string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
            code = HttpUtility.UrlEncode(code);
            string forgotPasswordHost = System.Configuration.ConfigurationManager.AppSettings["ForgotPasswordURL"];
            string forgotPasswordURL = Url.Route("URLApi", new {controller = "ResetPassword", userId = user.Id, code = code });
            try
            {
                //await UserManager.SendEmailAsync(user.Id, "Reset Password", $"{url}");
                await UserManager.SendEmailAsync(user.Id, "Reset Password", "Please reset your password by clicking <a href=\"" + forgotPasswordHost + forgotPasswordURL + "\">here</a>");
            }
            catch (Exception e)
            {
                return new Status
                {
                    status = "Invalid Input"
                };
            }

单击 URL,它会转到网站中的以下代码

[AllowAnonymous]
        public ActionResult ResetPassword(string code)
        {
            return code == null ? View("Error") : View();
        }

我从以下方法中得到无效令牌(这是网站代码)

[HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }
            var user = await UserManager.FindByNameAsync(model.Email);
            if (user == null)
            {
                // Don't reveal that the user does not exist
                return RedirectToAction("ResetPasswordConfirmation", "Account");
            }
            var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);
            if (result.Succeeded)
            {
                return RedirectToAction("ResetPasswordConfirmation", "Account");
            }
            AddErrors(result);
            return View();
        }

点击电子邮件 link,网页打开。但我注意到,当网页打开时和页面提交后,'_RequestVerificationToken' 的值是不同的。 任何帮助将不胜感激

找到答案了。我参考了以下 link : http://www.gunaatita.com/Blog/Invalid-Token-Error-on-Email-Confirmation-in-Aspnet-Identity/1056

这是由于 Web API 和 MVC 生成的机器密钥。在 Web API 和 MVC 上配置相同的机器密钥解决了 'Invalid Token' 问题。