private async Task <CheckExpireToken> GetPrincipalFromExpiredToken(string token) { var response = new CheckExpireToken(); try { var tokenValidationParameters = new TokenValidationParameters { ValidateAudience = false, //you might want to validate the audience and issuer depending on your use case ValidateIssuer = false, ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JwtKey"])), ValidateLifetime = true, ClockSkew = TimeSpan.Zero }; var tokenHandler = new JwtSecurityTokenHandler(); SecurityToken securityToken; var principal = tokenHandler.ValidateToken(token, tokenValidationParameters, out securityToken); var jwtSecurityToken = securityToken as JwtSecurityToken; if (jwtSecurityToken == null || !jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha256, StringComparison.InvariantCultureIgnoreCase)) { response.ErrorCode = "001"; response.Message = "Invalid Tokken"; //var ms = jwtSecurityToken.Claims; } else { response.Email = jwtSecurityToken.Claims.ToList()[0].Value; response.ErrorCode = "00"; response.Message = "Validate Tokken"; } return(response); } catch (Exception ex) { if (ex.GetType() == typeof(SecurityTokenExpiredException)) { response.ErrorCode = "003"; response.Message = "Token hết hạn"; return(response); } else { response.ErrorCode = "001"; response.Message = $"Lỗi : {ex.ToString()}"; return(response); } } }
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); }