Két faktor másik lába is kész.
This commit is contained in:
@@ -204,6 +204,59 @@ namespace WorkFlowCheck.API.Controllers
|
|||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
[HttpPost("Authenticate2F2")]
|
||||||
|
public async Task<ApiResponseDTO<UserDTO>> Authenticate2F2([FromBody] User2FADTO user2FADTO)
|
||||||
|
{
|
||||||
|
var retVal = new ApiResponseDTO<UserDTO>()
|
||||||
|
{
|
||||||
|
IsSuccess = true
|
||||||
|
};
|
||||||
|
if (string.IsNullOrEmpty(user2FADTO.UserName) ||
|
||||||
|
string.IsNullOrEmpty(user2FADTO.Password) ||
|
||||||
|
string.IsNullOrEmpty(user2FADTO.Code) ||
|
||||||
|
string.IsNullOrEmpty(user2FADTO.Token2FA))
|
||||||
|
{
|
||||||
|
retVal.IsSuccess = false;
|
||||||
|
retVal.Errors.Add("Nem megfelelo felhasználói név vagy jelszó");
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var userDTO_Response = await _userService.Authenticate2F2(user2FADTO.UserName,
|
||||||
|
user2FADTO.Password,
|
||||||
|
user2FADTO.Code,
|
||||||
|
user2FADTO.Token2FA);
|
||||||
|
if (userDTO_Response != null)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(userDTO_Response.UserName) == false)
|
||||||
|
{
|
||||||
|
retVal.IsSuccess = true;
|
||||||
|
retVal.Data = userDTO_Response;
|
||||||
|
Log.Information($"Sikeres azonosítás! {user2FADTO.UserName}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var error = $"Nem megfelelo felhasználó vagy jelszó! {user2FADTO.UserName}";
|
||||||
|
retVal.IsSuccess = false;
|
||||||
|
retVal.Errors.Add(error);
|
||||||
|
Log.Information(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var error = $"Nem megfelelo felhasználó vagy jelszó! {user2FADTO.UserName}";
|
||||||
|
retVal.IsSuccess = false;
|
||||||
|
retVal.Errors.Add(error);
|
||||||
|
Log.Information(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
|
||||||
|
Log.Error(ex.Message);
|
||||||
|
}
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
[HttpPost("AuthenticateNFC")]
|
[HttpPost("AuthenticateNFC")]
|
||||||
public async Task<ApiResponseDTO<UserDTO>> AuthenticateNFC([FromBody] UserSimpleDTO userSimpleDTO)
|
public async Task<ApiResponseDTO<UserDTO>> AuthenticateNFC([FromBody] UserSimpleDTO userSimpleDTO)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace WorkFlowCheck.BL.Services.Interfaces
|
|||||||
Task<UserDTO> UpdateUserAsync(UserDTO userDTO);
|
Task<UserDTO> UpdateUserAsync(UserDTO userDTO);
|
||||||
Task<UserDTO> Authenticate(string UserName, string Password);
|
Task<UserDTO> Authenticate(string UserName, string Password);
|
||||||
Task<string> Authenticate2F1(string UserName, string Password);
|
Task<string> Authenticate2F1(string UserName, string Password);
|
||||||
Task<UserDTO> Authenticate2F2(string UserName, string Password, string token2FA);
|
Task<UserDTO> Authenticate2F2(string UserName, string Password, string Code, string token2FA);
|
||||||
Task<UserDTO> AuthenticateNFC(string NFCCode);
|
Task<UserDTO> AuthenticateNFC(string NFCCode);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
var user = await _dbContext.Users
|
var user = await _dbContext.Users
|
||||||
.Include(i => i.UserRoles)
|
.Include(i => i.UserRoles)
|
||||||
.ThenInclude(i => i.Role)
|
.ThenInclude(i => i.Role)
|
||||||
.Where(w => w.UserName == userName)
|
.Where(w => w.UserName == userName && w.Active != false)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (user != null && PasswordHasher.VerifyPassword(user.PasswordHash, password))
|
if (user != null && PasswordHasher.VerifyPassword(user.PasswordHash, password))
|
||||||
{
|
{
|
||||||
@@ -137,15 +137,15 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(user.Email))
|
if (!string.IsNullOrEmpty(user.Email))
|
||||||
{
|
{
|
||||||
var token2F = CodeGenerator2F.GenerateSixDigitCode();
|
var code = CodeGenerator2F.GenerateSixDigitCode();
|
||||||
|
|
||||||
await _messageService.SendMailAsync(new List<string>()
|
await _messageService.SendMailAsync(new List<string>()
|
||||||
{
|
{
|
||||||
user.Email,
|
user.Email,
|
||||||
}, "Bejelentkezés megerősítése",
|
}, "Bejelentkezés megerősítése",
|
||||||
Get2FConfirmationMessageBody(token2F));
|
Get2FConfirmationMessageBody(code));
|
||||||
|
|
||||||
retVal = CodeGenerator2F.GenerateToken2F(userName, password, token2F);
|
retVal = CodeGenerator2F.GenerateToken2F(userName, password, code);
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -156,13 +156,50 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
public async Task<UserDTO> Authenticate2F2(string UserName, string Password, string token2FA)
|
public async Task<UserDTO> Authenticate2F2(string userName, string password, string code, string token2FA)
|
||||||
{
|
{
|
||||||
var retVal = new UserDTO() { RoleDTO = new List<RoleDTO>() };
|
var retVal = new UserDTO() { RoleDTO = new List<RoleDTO>() };
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var user = await _dbContext.Users
|
||||||
|
.Include(i => i.UserRoles)
|
||||||
|
.ThenInclude(i => i.Role)
|
||||||
|
.Where(w => w.UserName == userName && w.Active != false)
|
||||||
|
.FirstOrDefaultAsync();
|
||||||
|
if (user != null && PasswordHasher.VerifyPassword(user.PasswordHash, password))
|
||||||
|
{
|
||||||
|
if (CodeGenerator2F.ValidateToken2F(token2FA, userName, password, code))
|
||||||
|
{
|
||||||
|
var userDTO = new UserDTO()
|
||||||
|
{
|
||||||
|
Id = user.Id,
|
||||||
|
UserName = user.UserName,
|
||||||
|
RoleDTO = new List<RoleDTO>(),
|
||||||
|
};
|
||||||
|
foreach (var item in user.UserRoles)
|
||||||
|
{
|
||||||
|
userDTO.RoleDTO.Add(new RoleDTO()
|
||||||
|
{
|
||||||
|
Id = item.Role.Id,
|
||||||
|
RoleName = item.Role.RoleName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
user.JwtToken = GenerateJwtToken(userDTO);
|
||||||
|
await _dbContext.SaveChangesAsync();
|
||||||
|
|
||||||
|
retVal = _mapper.Map<UserDTO>(user);
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.Error(ex.Message);
|
||||||
|
}
|
||||||
|
return retVal;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
public async Task<UserDTO> AuthenticateNFC(string NFCCode)
|
public async Task<UserDTO> AuthenticateNFC(string NFCCode)
|
||||||
{
|
{
|
||||||
var retVal = new UserDTO() { RoleDTO = new List<RoleDTO>() };
|
var retVal = new UserDTO() { RoleDTO = new List<RoleDTO>() };
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace WorkFlowCheck.BL.Static
|
|||||||
var descriptor = new SecurityTokenDescriptor
|
var descriptor = new SecurityTokenDescriptor
|
||||||
{
|
{
|
||||||
Subject = new ClaimsIdentity(claims),
|
Subject = new ClaimsIdentity(claims),
|
||||||
Expires = DateTime.UtcNow.AddSeconds(60),
|
Expires = DateTime.UtcNow.AddSeconds(60 * 60 * 2),
|
||||||
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(KeyBytes), SecurityAlgorithms.HmacSha256Signature)
|
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(KeyBytes), SecurityAlgorithms.HmacSha256Signature)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ namespace WorkFlowCheck.Common.DTO
|
|||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string UserName { get; set; } = null!;
|
public string UserName { get; set; } = null!;
|
||||||
|
public string Password { get; set; } = null!;
|
||||||
|
public string Code { get; set; } = null!;
|
||||||
public string Token2FA { get; set; } = null!;
|
public string Token2FA { get; set; } = null!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user