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);
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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 = "服务异常"
                });;
            }
        }