Search code examples
c#asp.net-coreasp.net-identity-3asp.net-core-webapi

Password reset token provider in ASP.NET core - IUserTokenProvider not found


Hello,

In order to getting password reset work I need to register an IUserTokenProvider instance into DI.

Without it I get exception at following line:

var result = await _userManager.ResetPasswordAsync(user, token, password);
"No IUserTokenProvider named 'PasswordResetTokenProvider' is registered."

That makes sense so I tried to register it in the DI:

services.AddSingleton<IUserTokenProvider<User>, DataProtectorTokenProvider<User>>();

But the interface IUserTokenProvider does not exists. Do you know how to solve this?

Thanks


Solution

  • I'm not sure if it's workaround or normal approach, but the IUserTwoFactorTokenProvider interface seems to be a right way. IUserTokenProvider appears to no longer exists.

    Figured out that I have to register the provider manually in the identity:

    services.AddIdentity<User, Role>(options =>
                {
                    ...
                    options.Tokens.ProviderMap.Add("Default", new TokenProviderDescriptor(typeof(IUserTwoFactorTokenProvider<User>)));
                })
    

    And the optional configuration in ConfigureServices:

    services.Configure<DataProtectionTokenProviderOptions>(o =>
            {
                o.Name = "Default";
                o.TokenLifespan = TimeSpan.FromHours(1);
            });
    

    And the password reset / email validation tokens are working now.

    PS: Opened an issue for clarification