2016-01-26 15 views
5

Mam usługę Webapi, która generuje hasło Resetuj token.
Reklamowe punkt końcowy usługi generacja:ASP.NET Identity WebAPI niepoprawny token resetowania hasła

[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)); 
    } 

Moja aplikacja UserManager:

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; 
    } 

Token będą wykorzystywane w e-mail, aby wysłać adres URL do resetowania hasła użytkownika. Ten adres URL wskazuje na widok MVC ASP.NET, który jest częścią mojego projektu WebAPI i oczywiście jest hostowany w tej samej aplikacji internetowej w IIS. Przycisk resetowania hasła na stronie wywołuje mój inny punkt końcowy usługi, który resetuje hasło.
Passowrd punkt końcowy usługa resetu:

[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); 
    } 

także może pomóc wspomnieć, że oba te punkty końcowe Web API są w tym samym kontrolerze iw sterowniku zdefiniowałem globalną UserManger następująco:

private ApplicationUserManager _userManager; 
    public ApplicationUserManager UserManager 
    { 
     get 
     { 
      return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
     } 
     private set 
     { 
      _userManager = value; 
     } 
    } 

Gdy korzystam z zewnętrznego narzędzia, takiego jak Zaawansowany klient REST, jestem w stanie trafić pierwszy punkt końcowy, aby wygenerować token, a następnie przekazać token do drugiego punktu końcowego wraz z pocztą e-mail i nowym hasłem oraz pomyślnie zresetować hasło. Jednak gdy mój kontroler ASP.NET MVC używa tokenu generowanego przez pierwszy punkt końcowy i wywołuje punkt końcowy passwordReset, token jest nieprawidłowy! Już upewniam się, że nie ma problemu z kodowaniem/dekodowaniem, a token, który jest odbierany przez drugi punkt końcowy, jest identyczny w obu testach.
Po raz kolejny wszystkie moje kontrolery WebApi i ASP są w tym samym projekcie i hostowane w tej samej aplikacji internetowej. Myślę, że problem może być związany z nowym dostawcą tokena , gdy żądanie przychodzi na podstawie OwinContext, ale nie rozumiem, dlaczego działa wywołując go za pośrednictwem przeglądarki internetowej.

public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 

Odpowiedz

Powiązane problemy