public bool LoginUseToken(string token, out LoginTokenDTO loginToken) { loginToken = new LoginTokenDTO(); if (string.IsNullOrEmpty(token)) { return(false); } var decryptedString = string.Empty; using (var decrypter = new TripleDESEncryption(appConfig.TripleDESEncryptionKey)) { decryptedString = decrypter.Decrypt(token); } var paramsFromUrl = StringHelper.SplitString(decryptedString, "&") .Select(p => { var m = p.Split('='); return(new { key = m[0], value = m[1] }); }) .ToDictionary(x => x.key, x => x.value); //Encode the password user input var encodedPassword = SimpleTextEncodeHelper.EncodeText(paramsFromUrl["pwd"]); var username = paramsFromUrl["uid"]; //Retrieve user information from concierge login table var user = conciergeLoginloginRepo.Get(x => x.ConciergeID == username && x.password == encodedPassword); if (user != null) { string arrivalDate, status; paramsFromUrl.TryGetValue("arrivaldate", out arrivalDate); paramsFromUrl.TryGetValue("status", out status); //Set Info loginToken.UserName = user.ConciergeID; loginToken.ArrivalDate = arrivalDate; loginToken.Status = status; return(true); } return(false); }
public async Task <IActionResult> SignIn(UserToSignInDTO model) { try { if (!ModelState.IsValid) { return(BadRequest(ResponseMessage.Message("Bad request", errors: new { message = ModelState }))); } var user = _userManager.Users.FirstOrDefault(x => x.Email == model.Email); if (user == null) { return(Unauthorized(ResponseMessage.Message("Unauthorized", errors: new { message = "Invalid credentials" }))); } var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false); var userRoles = await _userManager.GetRolesAsync(user); if (result.Succeeded) { LoginTokenDTO loginToken = new LoginTokenDTO(); loginToken.UserId = user.Id; loginToken.Token = JwtTokenCreator.GetToken(user, _configuration, userRoles[0]); return(Ok(ResponseMessage.Message("Success", data: new { loginToken }))); } } catch (Exception e) { _logger.LogError(e.Message); return(BadRequest(ResponseMessage.Message("Bad request", errors: new { message = "Data processing error" }))); } return(Unauthorized(ResponseMessage.Message("Unauthorized", errors: new { message = "Invalid credentials" }))); }
public async Task <IActionResult> GetToken(string email, string senha, [FromServices] UserManager <MilenioRadartonaAPIUser> userManager, [FromServices] SignInManager <MilenioRadartonaAPIUser> signInManager, [FromServices] SigningConfigurations signingConfigurations, [FromServices] TokenConfigurations tokenConfigurations) { var watch = new Stopwatch(); watch.Start(); bool credenciaisValidas = false; // Verifica a existência do usuário nas tabelas do // ASP.NET Core Identity var userIdentity = userManager .FindByNameAsync(email).Result; if (userIdentity != null) { // Efetua o login com base no Id do usuário e sua senha var resultadoLogin = signInManager .CheckPasswordSignInAsync(userIdentity, senha, false) .Result; if (resultadoLogin.Succeeded) { // Verifica se o usuário em questão possui // a role Acesso-APIAlturas credenciaisValidas = userManager.IsInRoleAsync( userIdentity, Roles.ROLE_API_RADAR).Result; } } if (credenciaisValidas) { Chave chave = _ctx.Usuarios.Where(u => u.Email.Equals(email)).FirstOrDefault().Chave; if (chave == null || chave.Token == "") { ClaimsIdentity identity = new ClaimsIdentity( new GenericIdentity(email, "Login"), new[] { new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString("N")), new Claim(JwtRegisteredClaimNames.UniqueName, email) } ); DateTime dataCriacao = DateTime.Now; DateTime dataExpiracao = dataCriacao + TimeSpan.FromDays(tokenConfigurations.Days); var handler = new JwtSecurityTokenHandler(); var securityToken = handler.CreateToken(new SecurityTokenDescriptor { Issuer = tokenConfigurations.Issuer, Audience = tokenConfigurations.Audience, SigningCredentials = signingConfigurations.SigningCredentials, Subject = identity, NotBefore = dataCriacao, Expires = dataExpiracao }); var token = handler.WriteToken(securityToken); Chave novaChave = new Chave() { Authenticated = true, Created = dataCriacao, Expiration = dataExpiracao, Token = token, Message = "OK", }; var usuario = _ctx.Usuarios.Where(u => u.Email.Equals(email)) .Include(a => a.Chave) .FirstOrDefault(); if (usuario.Chave == null) { usuario.Chave = novaChave; _ctx.Attach(usuario).State = EntityState.Modified; _ctx.SaveChanges(); } if (novaChave.Token != usuario.Chave.Token) { usuario.Chave = novaChave; _ctx.Attach(usuario).State = EntityState.Modified; _ctx.SaveChanges(); } chave = novaChave; } LoginTokenDTO loginToken = new LoginTokenDTO { DataCriacao = chave.Created, DataExpiracao = chave.Expiration, Token = chave.Token }; watch.Stop(); var TempoRequisicao = watch.ElapsedMilliseconds; await LogRequest(email, "/Login/GetToken", TempoRequisicao); return(Ok(loginToken)); } else { watch.Stop(); var TempoRequisicao = watch.ElapsedMilliseconds; if (email != null) { await LogRequest(email, "/Login/GetToken", TempoRequisicao); } else { await LogRequest("", "/Login/GetToken", TempoRequisicao); } return(StatusCode(401, "Usuario ou senha invalidas")); } }
public async Task <object> LoginByJWT([FromBody] LoginTokenDTO model) { var responseModel = new SumProfileResponseDTO(); responseModel.Profile = new ProfileReponse(); responseModel.ListRole = new List <ListRole>(); responseModel.Profile.Email = model.Email; if (model.Jwt == null) { responseModel.ErrorCode = "001"; responseModel.Message = "Token không hợp lệ"; } else { CheckExpireToken response = await GetPrincipalFromExpiredToken(model.Jwt); if (response.ErrorCode == "00") { //Check exists User var user = await _userManager.FindByNameAsync(response.Email); if (user != null) { var aspNetUserLogin = _repositoryWrapper.AspNetUserProfiles.FirstOrDefault(p => p.UserId == user.Id); responseModel.Profile = _mapper.Map <ProfileReponse>(user); responseModel.Profile.FullName = aspNetUserLogin.FullName; responseModel.Profile.RegType = aspNetUserLogin.RegType; responseModel.Profile.AvartarFileName = aspNetUserLogin.AvatarUrl ?? "noimage.png"; responseModel.Profile.AvartarFullUrl = _configuration["Cloud_Path"] + $"/user/avatar/original/{aspNetUserLogin.AvatarUrl ?? "noimage.png"}"; //List Role var lstRole = await _repositoryWrapper.AspNetUsers.GetListRole(user.Id); responseModel.ListRole = _mapper.Map <List <ListRole> >(lstRole); //ProductBrandId var userProfiler = await _repositoryWrapper.AspNetUserProfiles.FirstOrDefaultAsync(p => p.UserId == user.Id); if (userProfiler != null) { responseModel.ProductBrandId = userProfiler.ProductBrand_ID ?? 0; if (responseModel.ProductBrandId != 0) { var brand = await _repositoryWrapper.Brand.FirstOrDefaultAsync(p => p.ProductBrand_ID == responseModel.ProductBrandId); if (brand != null) { responseModel.ProductBrandTypeId = brand.ProductBrandType_ID ?? 1; responseModel.ProductBrandYearJoin = (int)(DateTime.Now.Year - brand.CreateDate?.Year); responseModel.ReferralCode = brand.ReferralCode; } } } else { responseModel.ProductBrandId = 0; } // responseModel.Role = lstRole.Count > 0 ? string.Join(",", lstRole) : ""; //var jwt = await GenerateJwtToken(model.Email, user); responseModel.JWT = model.Jwt; responseModel.UserId = user.Id; responseModel.ErrorCode = "00"; responseModel.Message = "Đăng nhập thành công"; //Total UnRead responseModel.NumberFCMUnread = await _repositoryWrapper.FCMMessage.GetNumberFCMUnread(user.Id); return(responseModel); } } else if (response.ErrorCode == "003") { //Call refresh token var user = await _userManager.FindByNameAsync(model.Email); if (user != null) { return(await RefreshToken(model.Email, user)); } else { responseModel.ErrorCode = response.ErrorCode; responseModel.Message = response.Message; } } else { responseModel.ErrorCode = response.ErrorCode; responseModel.Message = response.Message; } } return(responseModel); }