public static string SetUserToken(string logId, int logType, TokenDataModel dataModel = null) { //设置用户token string newToken = System.Guid.NewGuid().ToString("N"); string token = string.Empty; if (GetUserTokenModel(logId, logType, out token)) { XCCloudUserTokenCache.Remove(token); } XCCloudUserTokenModel tokenModel = new XCCloudUserTokenModel(logId, Utils.ConvertDateTimeToLong(DateTime.Now), logType, dataModel); XCCloudUserTokenCache.AddToken(newToken, tokenModel); return(newToken); }
public ServiceResponse <TokenDataModel, ValidationResult> Authenticate(string email, string password) { var validationResult = new ValidationResult(); var user = _dbContext.Users.Include(x => x.Organization).SingleOrDefault(x => x.Email == email); // return null if user not found if (user == null) { validationResult.Errors.Add(new ValidationFailure("", ValidationMessages.Unauthorized)); return(new ServiceResponse <TokenDataModel, ValidationResult>(validationResult, ServiceResponseStatuses.Unauthorized)); } var a = BCrypt.Net.BCrypt.HashPassword("Sasha280920"); if (!BCrypt.Net.BCrypt.Verify(password, user.Password)) { validationResult.Errors.Add(new ValidationFailure("", ValidationMessages.Unauthorized)); return(new ServiceResponse <TokenDataModel, ValidationResult>(validationResult, ServiceResponseStatuses.Unauthorized)); } // authentication successful so generate jwt token var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(_configuration.GetSection("auth:key").Value); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, user.UserId), new Claim(ClaimTypes.Role, user.Role.ToString()) }), Expires = DateTime.UtcNow.AddMinutes(Int32.Parse(_configuration.GetSection("auth:tokenLifeTime").Value)), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); var result = new TokenDataModel { User = user, Token = tokenHandler.WriteToken(token) }; return(new ServiceResponse <TokenDataModel, ValidationResult>(result)); }
public async Task <string> GenerateAccessTokenAsync(GoblinIdentityGenerateAccessTokenModel model, CancellationToken cancellationToken = default) { var userEntity = await _userRepo.Get(x => x.UserName == model.UserName) .FirstOrDefaultAsync(cancellationToken).ConfigureAwait(true); // Check User is exist if (userEntity == null) { throw new GoblinException(nameof(GoblinIdentityErrorCode.UserNotFound), GoblinIdentityErrorCode.UserNotFound); } // Compare password hash from request and database var passwordHash = PasswordHelper.HashPassword(model.Password, userEntity.PasswordLastUpdatedTime); if (passwordHash != userEntity.PasswordHash) { throw new GoblinException(nameof(GoblinIdentityErrorCode.WrongPassword), GoblinIdentityErrorCode.WrongPassword); } // Generate Access Token var now = GoblinDateTimeHelper.SystemTimeNow; var accessTokenData = new TokenDataModel <AccessTokenDataModel> { ExpireTime = now.Add(SystemSetting.Current.AccessTokenLifetime), CreatedTime = now, Data = new AccessTokenDataModel { UserId = userEntity.Id } }; var accessToken = JwtHelper.Generate(accessTokenData); return(accessToken); }
public async Task <ResultContract <LoginResultContract> > Login([FromBody] LoginParamContract loginParam) { try { if (string.IsNullOrWhiteSpace(loginParam.Account)) { return(new ResultContract <LoginResultContract> { Code = -1, Msg = "请输入账号" }); } if (string.IsNullOrWhiteSpace(loginParam.Password)) { return(new ResultContract <LoginResultContract> { Code = -1, Msg = "请输入密码" }); } //用户验证 var user = userService.CheckUser(loginParam.Account, loginParam.Password); if (user == null) { return(new ResultContract <LoginResultContract> { Code = -1, Msg = "账号或密码不正确" }); } //平台验证 var application = applicationService.GetApplicationByID(loginParam.AppId); if (application == null) { return(new ResultContract <LoginResultContract> { Code = -1, Msg = "平台未注册" }); } //更改用户登录状态 var userEntity = userService.GetUser(user.UserId); userEntity.IsLogin = true; userService.Update(userEntity); //生成token var model = new TokenDataModel { UserId = user.UserId, Account = user.UserAccount, AppName = application.AppName, FromSystem = "" }; var token = JWT.GenerateToken(model, application.AppSecret); var result = new LoginResultContract() { Token = token, User = new Contracts.DB.UserContract() { UserId = user.UserId, UserName = user.UserName, OrganizationId = user.OrganizationId } }; return(new Contracts.ResultContract <LoginResultContract>() { Code = 0, Msg = "", Data = result }); } catch (Exception) { return(new Contracts.ResultContract <LoginResultContract>() { Code = -1, Msg = "服务异常" });; } }