public async Task <IActionResult> Deregister2FAAuthenticator(string redirectUrl) { var user = await _userManager.GetUserAsync(HttpContext.User); if (user == null) { throw new Exception("Invalid login info."); } await _userManager.RemoveAuthenticationTokenAsync(user, _tokenOptions.GetAspNetUserStoreProviderName(), _tokenOptions.GetRecoverCodesName()); await _userManager.RemoveAuthenticationTokenAsync(user, _tokenOptions.GetAspNetUserStoreProviderName(), _tokenOptions.GetAuthenticatorKeyName()); await UpdateUser2faStatus(user.Id); return(RedirectToAction("Register2FA", new { redirectUrl, userId = user.Id })); }
public override Task ReplaceCodesAsync(UserModel user, IEnumerable <string> recoveryCodes, CancellationToken cancellationToken) { List <string> recoveryCodesList = recoveryCodes.ToList(); // Hash each recovery code using (var sha256 = SHA256.Create()) { for (int i = 0; i < recoveryCodesList.Count; i++) { var hashedBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(recoveryCodesList[i])); var hash = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower(); recoveryCodesList[i] = hash; } } var mergedCodes = string.Join(";", recoveryCodesList); return(SetTokenAsync(user, tokenOptions.GetAspNetUserStoreProviderName(), tokenOptions.GetRecoverCodesName(), mergedCodes, cancellationToken)); }
public void GetAspNetUserStoreProviderName_Executed_ReturnsAspNetUserStoreProviderName() { // Arrange var expectedValue = "[AspNetUserStore]"; // Act var lookedUpValue = tokenOptions.GetAspNetUserStoreProviderName(); // Assert Assert.True((lookedUpValue == expectedValue), $"GetAspNetUserStoreProviderName() should return {expectedValue}."); }