代码之家  ›  专栏  ›  技术社区  ›  jbassking10

ASP。使用网站和web api重置Net Identity密码

  •  0
  • jbassking10  · 技术社区  · 8 年前

    我们有两种不同的方式让人们执行忘记密码: 1、通过网站-我的网站。com/帐户/放弃密码 通过我们的应用程序-单击“忘记密码”将用户的电子邮件地址传递给我们的asp。net web api创建代码并发送电子邮件。

    单击电子邮件中的链接将显示正确的页面,我们可以在其中输入电子邮件和新密码。使用选项1重置密码时,效果良好。使用选项2会出现无效的令牌错误。网站和web api都在同一台服务器上。

    以下是Web api代码:

        var user = await UserManager.FindByEmailAsync(email);            
        var code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
    
        var callbackUrl = $"/Account/ResetPassword?userId={user.Id}&code={code}";            
        var path = System.Web.Hosting.HostingEnvironment.MapPath("~/Content/emails/ResetPassword.html");
    
        var body = GenerateEmailBody(user);
        await UserManager.SendEmailAsync(user.Id, "Reset Password", body);
    

    这是网站代码

        var user = await UserManager.FindByEmailAsync(model.Email);
        if (user == null)// || !(await UserManager.IsEmailConfirmedAsync(user.Id)))
        {
            // Don't reveal that the user does not exist or is not confirmed
            return View("ForgotPasswordConfirmation");
        }
    
        // Send an email with this link
        string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
        var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
        var body = GenerateEmailBody(user);
        await UserManager.SendEmailAsync(user.Id, "Reset Password", body);
    

    我验证了UserTokenProvider在两者中也是相同的。

     manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("IdentityStuff"));
    

    我了解到MachineKey可能会导致此问题,除非我们只使用一台服务器。

    另一条值得一提的信息是,网站创建时,没有添加标识。这是事后的想法。web api从identity开始。

    1 回复  |  直到 4 年前
        1
  •  1
  •   jbassking10    6 年前

    为了清楚起见,我想我会回答我的问题。

    我没有在网站和api中都使用重置逻辑,而是让网站和我们的应用程序调用api来重置密码。

    然而,我确实在使用负载平衡器时遇到了另一个问题。由于一台服务器可能会创建重置代码,而另一台服务器可能会响应链接,因此我们遇到了相同的问题。

    为了解决这个问题,我有一个DNS条目,它总是指向一个服务器,该服务器用于创建代码并实际重置密码。这消除了获取无效令牌的问题。

    HTH。

    推荐文章