当前位置: 首页 > 知识库问答 >
问题:

ASP.NET标识WebAPI无效密码重置令牌

戚泰
2023-03-14

我有一个生成密码重置令牌的Webapi服务。
令牌生成服务endpoint:

    [Authorize(Users = "abcd")]
    [HttpGet]
    [ActionName("GenerateForgotPasswordToken")]
    public async Task<IHttpActionResult> GenerateForgotPasswordToken(string key)
    {
        if (key == null || UserManager.FindById(key) == null)
        {
            return InternalServerError(new Exception("User not found"));
        }
        return Ok(await UserManager.GeneratePasswordResetTokenAsync(key));
    }
    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
    {
        //var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
        var manager = new ApplicationUserManager(new UserStore<IdentityUser>(new MTA()));
        // Configure validation logic for usernames
        manager.UserValidator = new UserValidator<IdentityUser>(manager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };
        // Configure validation logic for passwords
        manager.PasswordValidator = new PasswordValidator
        {
            RequiredLength = 6,
            RequireNonLetterOrDigit = true,
            RequireDigit = true,
            RequireLowercase = true,
            RequireUppercase = true,
        };
        var dataProtectionProvider = options.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            manager.UserTokenProvider = new DataProtectorTokenProvider<IdentityUser>(dataProtectionProvider.Create("ASP.NET Identity"));
        }
        return manager;
    }
    [HttpGet]
    [AllowAnonymous]
    public async Task<HttpResponseMessage> ResetPassword([FromUri]string email,[FromUri]string code,[FromUri]string password)
    {
        var user = await UserManager.FindByEmailAsync(email);
        var result = await UserManager.ResetPasswordAsync(user.Id, code, password);
        if (result.Succeeded)
        {
            return Request.CreateResponse();
        }
        return Request.CreateResponse(System.Net.HttpStatusCode.Ambiguous);
    }
    private ApplicationUserManager _userManager;
    public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
        private set
        {
            _userManager = value;
        }
    }
 public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)

共有1个答案

郗欣嘉
2023-03-14

我在看了这个问题后发现了问题:让ASP.NET Identity 2.0电子邮件确认令牌为WCF和MVC工作

以下是IIS计算机密钥配置指南:如何使用IIS生成计算机密钥

 类似资料:
  • 通过复制VS2013模板中的代码,我在MVC应用程序中实现了ASP.NET标识。基本的东西是工作的,但我不能得到重置密码工作。当我显示“忘记密码”页面时,将生成一封包含令牌的电子邮件。方法返回此标记:

  • 我写的是MVC5,使用的是Identity 2.0。 我在邮件中点击链接,我正在获得密码重置令牌并使用 结果总是false,并表示“无效令牌”。我该在哪里修?

  • 我有两台服务器使用相同的ASP。NET核心标识后端。我使用以下命令生成密码重置令牌: 我通过电子邮件链接发送此令牌。当用户单击链接时,他们会被带到一个单独的站点,该站点应提供一个用户界面来更改密码。以下代码处理用户提交令牌及其新密码的密码: 在第二台服务器上,标识结果总是返回false,因为“无效令牌”。 通过查看源代码,我看到令牌是使用IP地址生成的(因此我理解令牌验证失败的原因)。 我的问题是

  • 如何覆盖令牌消息“此密码重置令牌无效。” 我尝试将此添加到ResetPasswordController中,但它仍然显示默认的令牌消息。 我需要添加一个URL而不是仅仅改变文本。覆盖“密码重置令牌无效”的错误文本Laravel 我发现实际验证令牌的是$this->broker()->reset()。完全覆盖此方法是否是覆盖令牌消息的唯一方法?

  • 我在尝试重置密码时遇到这个问题,在我的路由/网络中设置区域设置如下: 路线/网页 正如您所看到的,我有一个前缀,我必须在所有链接上设置,我有一个中间件区域设置,其中我将区域设置前缀设置为默认值,以避免每次在每个链接中设置区域设置 区域设置中间件 到目前为止还不错,现在问题来了,当我试图重置一个用户密码;单击重置链接后(示例:https://cubik.app//en/password/reset/