public virtual async Task <object> AuthenticateUserAsync([FromBody] Login login)
        {
            if (ModelState.IsValid)
            {
                var result = await _service.AuthenticateUserAsync(login.UserName, login.Password);

                if (result)
                {
                    var token = await _tokenProvider.GenerateToken(login.UserName, login.Password);

                    var user = await _userService.GetUserByUsername(login.UserName);

                    var permissions = await _permissionService.GetPermissionByRolesAsync(user.Roles.Select(r => r.ID));

                    var fRole   = user.Roles.OrderBy(r => r.CreatedDate).FirstOrDefault();
                    var tResult = new
                    {
                        User = new
                        {
                            ID       = user.ID,
                            FullName = user.FirstName + ' ' + user.LastName,
                            Username = user.Username,
                            Email    = user.Email,
                            RowGuid  = user.RowGuid,
                            RoleID   = fRole.ID,
                            Role     = fRole.Name,
                            RoleCode = fRole.RoleCode,
                            Roles    = user.Roles,
                            //Agent Rule: if user has single role(Agent)
                            IsAgent = (new List <string> {
                                "IPA", "PIPA"
                            }).Contains(fRole.RoleCode)
                        },
                        Token       = token,
                        Permissions = permissions?.Select(p => p?.Name).Distinct()
                    };

                    //last login
                    user.LastLogin = System.DateTime.UtcNow;
                    await _userService.UpdateAsync(user);

                    //log UserLogin
                    if (login.ClientInfo != null)
                    {
                        try
                        {
                            login.ClientInfo.UserID = user.ID;
                            await _userLoginService.CreateAsync(login.ClientInfo);
                        }
                        catch (Exception ex)
                        {
                            _logger.Log(PDX.Logging.Models.LogType.Warning, ex);
                        }
                    }

                    return(tResult);
                }
            }
            return(null);
        }
Exemple #2
0
        /// <summary>
        /// 登陆接口
        /// </summary>
        /// <param name="loginCode"></param>
        /// <param name="tokenOptions"></param>
        /// <returns></returns>
        public Result <LoginOutput> Login(string weChatOpenId, TokenProvider tokenOptions)
        {
            //Questions();
            //_unitOfWork.SaveChanges();

            if (_user.Any(u => u.WeChatOpenId == weChatOpenId))//如果用户存在
            {
                User userInfo = _user.FirstOrDefault(u => u.WeChatOpenId == weChatOpenId);
                if (string.IsNullOrEmpty(userInfo.UserName) ||
                    string.IsNullOrEmpty(userInfo.PhoneNumber) || string.IsNullOrEmpty(userInfo.Department))
                { //资料不完善,返回false让用户完善信息
                    return(Result <LoginOutput> .Success(new LoginOutput
                    {
                        UserName = userInfo.UserName,
                        Token = tokenOptions.GenerateToken(userInfo.Id.ToString()).access_token,
                        Perfect = false,
                        PhoneNumber = userInfo.PhoneNumber,
                        Dempartment = userInfo.Department
                    }));
                }
                else
                {
                    return(Result <LoginOutput> .Success(new LoginOutput
                    {
                        UserName = userInfo.UserName,
                        Token = tokenOptions.GenerateToken(userInfo.Id.ToString()).access_token,
                        Perfect = true,
                        PhoneNumber = userInfo.PhoneNumber,
                        Dempartment = userInfo.Department
                    }));;
                }
            }
            else //用户不存在创建用户(相当于注册),返回false让用户完善信息
            {
                _user.Insert(new User()
                {
                    WeChatOpenId = weChatOpenId
                });
                _unitOfWork.SaveChanges();
                string userId = (_user.FirstOrDefault(u => u.WeChatOpenId == weChatOpenId)).Id.ToString();
                return(Result <LoginOutput> .Success(new LoginOutput
                {
                    UserName = null,
                    Token = tokenOptions.GenerateToken(userId).access_token,
                    Perfect = false,
                    PhoneNumber = null,
                    Dempartment = null
                }));
            }
        }
Exemple #3
0
        public IHttpActionResult Authenticate([FromBody] LoginRequest request)
        {
            var response = new Response();

            var user = userRepo.Get(request.Username);

            if (user != null)
            {
                MD5    md5Hash = MD5.Create();
                string hash    = PasswordManager.GetMd5Hash(md5Hash, request.Password);
                if (PasswordManager.VerifyMd5Hash(md5Hash, request.Password, hash))
                {
                    var token = TokenProvider.GenerateToken(request.Username);
                    return(Ok(new Response
                    {
                        Data = token,
                        Message = "Login successful",
                        Status = true
                    }));
                }
            }

            return(Ok(new Response {
                Data = null,
                Message = "Invalid credentials",
                Status = false
            }));
        }
Exemple #4
0
        public LoginResponseModel Login(string userName, string password)
        {
            LoginResponseModel responseModel = new LoginResponseModel();

            try
            {
                using (JWTSampleDbContext dbContext = new JWTSampleDbContext())
                {
                    //Check user exists in db
                    var appUser = dbContext.ApplicationUser.Where(a => a.Username == userName && a.Password == password).FirstOrDefault();
                    if (appUser != null)
                    {
                        //Generate token
                        responseModel.Token = TokenProvider.GenerateToken(appUser);

                        UserInfo userInfo = new UserInfo();
                        userInfo.UserId    = appUser.UserId;
                        userInfo.UserName  = appUser.Username;
                        userInfo.Email     = appUser.Password;
                        responseModel.User = userInfo;
                    }
                }
                return(responseModel);
            }
            catch (Exception ex)
            {
                throw new Exception("Invalid Login");
            }
        }
        public async Task <IActionResult> Login([FromForm] ApiLoginModel model)
        {
            var result = await _signInManager.PasswordSignInAsync(model.Name, model.Pwd, true, false);

            if (result.Succeeded)
            {
                var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_settings.Value.SecretKey));
                var options    = new TokenProviderOptions()
                {
                    Issuer             = "EntityAbstract",
                    Audience           = "EntityAbstractAudience",
                    SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256)
                };
                var tpm   = new TokenProvider(options);
                var token = await tpm.GenerateToken(model.Name, model.Pwd);

                var user = await _userManager.FindByNameAsync(model.Name);

                return(token != null ? (IActionResult)Json(token) : BadRequest());
            }

            if (result.IsLockedOut)
            {
                return(BadRequest("Lockout"));
            }
            else
            {
                return(BadRequest("Invalid login attempt"));
            }
        }
        /// <summary>
        ///    This method will store the credit card and return a token that can be used outside the billing system
        /// </summary>
        /// <param name="billingAccountId"></param>
        /// <param name="creditCard"></param>
        /// <param name="expirationDate"></param>
        /// <returns></returns>
        public string StoreCreditCard(int billingAccountId, string creditCard, int expirationMonth, int expirationYear)
        {
            CreditCardPaymentValidator.Validate(billingAccountId.ToString(), creditCard, expirationMonth, expirationYear);

            //Method name must be business specific.

            //Create a tokenNumber for the end user.
            var tokenNumber = TokenProvider.GenerateToken();

            //Store Billing account and token.


            //I could put the rest on the queue for processing because I can't do anything else
            //Then the other process will update DC and get the PEC and handle failures.
            //That would give me autmatice retry.  Would need to encrypt CC# for that.

            //Get the PEC from the billing providere
            var pec = PaymentGateway.StoreCreditCardAtTokenProviders(creditCard, expirationMonth, expirationYear);

            //Need to expect a specific exception and catch and handle it.


            //What do I do if the payment gateway is down.



            //Store both the tokenNumber the PEC in the billing system
            //BillingGateway.CreateCreditCardBillingPaymentMethod(billingAccountId, pec, tokenNumber);

            //Now that I have a pec save it to the db with a new tokenNumber
            DataFacade.CreateToken(new Token(pec, tokenNumber));
            return(tokenNumber);
        }
Exemple #7
0
        public IActionResult Post(string username, string password)
        {
            if (username != null && password != null)
            {
                if (true)
                {
                    return(new ObjectResult(token.GenerateToken(username)));
                }
            }

            //Si llega hasta aqui, algo salio mal...
            return(BadRequest());
        }
        public JsonResult Login(LoginForm login)
        {
            using (SoHoaEntities db = new SoHoaEntities())
            {
                S_Users user = db.S_Users.SingleOrDefault(x => x.UserName == login.Username);
                if (user != null)
                {
                    string passwordSalt  = user.PasswordSalt;
                    string passwordInput = AuthenticationHelper.GetMd5Hash(passwordSalt + login.Password);
                    string passwordUser  = user.Password;

                    if (passwordInput.Equals(passwordUser))
                    {
                        TokenProvider tokenProvider = new TokenProvider();
                        TokenIdentity token         = tokenProvider.GenerateToken(login.Username,
                                                                                  Request.Headers["User-Agent"].ToString(),
                                                                                  HttpContext.Request.UserHostAddress, Guid.NewGuid().ToString(),
                                                                                  DateTime.Now.AddHours(7).Ticks);
                        token.SetAuthenticationType("Custom");
                        token.SetIsAuthenticated(true);
                        db.AccessTokens.Add(new AccessToken()
                        {
                            Token         = token.Token,
                            EffectiveTime = new DateTime(token.EffectiveTime),
                            ExpiresIn     = token.ExpiresTime,
                            IP            = token.IP,
                            UserAgent     = token.UserAgent,
                            UserName      = token.Name
                        });
                        db.SaveChanges();

                        return(Json(
                                   new
                        {
                            Token = token,
                            Profile = new
                            {
                                Username = token.UserName,
                                FullName = user.UserName,
                            },
                            User = new
                            {
                                UserName = user.UserName,
                                UserId = user.UserID
                            }
                        }));
                    }
                }
            }
            return(Json("Login failed!"));
        }
Exemple #9
0
        public IHttpActionResult Login(LoginForm loginForm)
        {
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                Users user = db.Users.Include(x => x.LoaiTaiKhoan).SingleOrDefault(x => x.UserName == loginForm.Username);
                if (user != null)
                {
                    string passwordSalt  = user.PasswordSalt;
                    string passwordInput = AuthenticationHelper.GetMd5Hash(passwordSalt + loginForm.Password);
                    string passwordUser  = user.Password;

                    if (String.Equals(passwordInput, passwordUser, StringComparison.InvariantCulture) && user.Active == true)
                    {
                        TokenProvider tokenProvider = new TokenProvider();
                        TokenIdentity token         = tokenProvider.GenerateToken(user.UserId, loginForm.Username,
                                                                                  Request.Headers.UserAgent.ToString(),
                                                                                  "", Guid.NewGuid().ToString(),
                                                                                  DateTime.Now.Ticks);
                        token.SetAuthenticationType("Custom");
                        token.SetIsAuthenticated(true);
                        db.AccessTokens.Add(new AccessTokens()
                        {
                            Token         = token.Token,
                            EffectiveTime = new DateTime(token.EffectiveTime),
                            ExpiresIn     = token.ExpiresTime,
                            IP            = token.IP,
                            UserAgent     = token.UserAgent,
                            UserName      = token.Name
                        });
                        db.SaveChanges();
                        return(Ok(
                                   new
                        {
                            AccessToken = token,
                            Profile = new
                            {
                                UserId = user.UserId,
                                Username = user.UserName,
                                Email = user.Email,
                                LoaiTaiKhoanID = user.LoaiTaiKhoanID,
                                LoaiTaiKhoan = user.LoaiTaiKhoan.TenLoai,
                                CoSoID = user.CoSoID
                            }
                        }));
                    }
                }
                return(Ok("Login failed!"));
            }
        }
Exemple #10
0
        public ActionResult <AuthenticateResponseDTO> Authenticate([FromBody] AuthenticateRequestDTO model)
        {
            var dbUser = _userService.Get(u => u.Name == model.Name).FirstOrDefault();

            if (null == dbUser)
            {
                return(BadRequest(new { error = "User does not exist" }));
            }
            else if (PasswordManager.GeneratePasshash(dbUser.Salt, model.Password) != dbUser.Passhash)
            {
                return(BadRequest(new { error = "Email or password is incorrect" }));
            }
            var userToken = TokenProvider.GenerateToken(dbUser);

            return(Ok(new AuthenticateResponseDTO(dbUser, userToken)));
        }
Exemple #11
0
        public async Task <User> Authorize(AuthenticationModel model)
        {
            var user = await _context.Users.FirstOrDefaultAsync(x => x.Username == model.Username && x.Password == model.Password);

            if (user != null)
            {
                user.Token     = TokenProvider.GenerateToken(user.Username, user.Id.ToString());
                user.LastLogin = DateTime.UtcNow;
                _context.Entry(await _context.Users.FirstOrDefaultAsync(x => x.Id == user.Id)).CurrentValues.SetValues(user);
                await _context.SaveChangesAsync();

                return(user);
            }
            else
            {
                return(null);
            }
        }
        public ActionResult <dynamic> GetByEmail(string email)
        {
            if (string.IsNullOrEmpty(email) || !email.IsValidEmail())
            {
                return(BadRequest(new { Error = "Email invalido!" }));
            }


            var user = _repository.GetByEmail(email);

            if (user == null)
            {
                return(Ok());
            }

            var token = TokenProvider.GenerateToken(_mapper.Map <UserDTO>(user));


            try
            {
                var absoluteUri = string.Concat(
                    Request.Scheme,
                    "://",
                    Request.Host.ToUriComponent(),
                    Request.PathBase.ToUriComponent(),
                    Request.Path.ToUriComponent()
                    );

                var endPointHome = absoluteUri.Replace("api/user/recovery", "");

                var endPointPassword = endPointHome + "#alterarSenha/" + Helpers.Base64Encode(token);

                var templates = Helpers.GetTemplete("EmailRecovery.html").Replace("END_POINT", endPointPassword).Replace("SITE_HOME", endPointHome);
                Helpers.SendEmail(email, "Sistema - Recuperação de Senha", templates, null);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.StackTrace);
            }

            return(Ok());
        }
Exemple #13
0
        public IActionResult Get(string grant_type, string appid, string secret)
        {
            CommonResult result = new CommonResult();

            if (!grant_type.Equals(GrantType.ClientCredentials))
            {
                result.ErrCode = "40003";
                result.ErrMsg  = ErrCode.err40003;
                return(ToJsonContent(result));
            }
            else if (string.IsNullOrEmpty(grant_type))
            {
                result.ErrCode = "40003";
                result.ErrMsg  = ErrCode.err40003;
                return(ToJsonContent(result));
            }
            string strHost = Request.Host.ToString();
            APP    app     = _iAPPService.GetAPP(appid, secret);

            if (app == null)
            {
                result.ErrCode = "40001";
                result.ErrMsg  = ErrCode.err40001;
            }
            else
            {
                if (!app.RequestUrl.Contains(strHost) || !strHost.Contains("localhost"))
                {
                    result.ErrCode = "40002";
                    result.ErrMsg  = ErrCode.err40002 + ",你当前请求主机:" + strHost;
                }
                else
                {
                    TokenProvider tokenProvider = new TokenProvider(_jwtModel);
                    TokenResult   tokenResult   = tokenProvider.GenerateToken(grant_type, appid, secret);
                    result.ResData = tokenResult;
                    result.ErrCode = "0";
                    return(ToJsonContent(result));
                }
            }
            return(ToJsonContent(result));
        }
Exemple #14
0
        public async Task <User> Authenticate(Authentication model)
        {
            var user = await _context.Users.FirstOrDefaultAsync(x => x.Username == model.Username && x.Password == model.Password);

            if (user != null)
            {
                user.Token           = TokenProvider.GenerateToken(user.Username, user.Id.ToString());
                user.TokenExpireTime = DateTime.UtcNow.AddMinutes(20);
                user.LastLogin       = DateTime.UtcNow;

                var task = Task.Run(() => _context.Entry(_context.Users.FirstOrDefault(x => x.Id == user.Id)).CurrentValues.SetValues(user));

                await task.ContinueWith(task => _context.SaveChangesAsync());

                return(user);
            }
            else
            {
                return(null);
            }
        }
Exemple #15
0
        public async Task <IActionResult> Login(string username, string password, string role)
        {
            var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("ThisIsASecretKeyForAspNetCoreAPIToken"));
            var options    = new TokenProviderOptions
            {
                Audience    = "audience",
                Issuer      = "issuer",
                Credentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256)
            };
            var tpm   = new TokenProvider(options);
            var token = await tpm.GenerateToken(HttpContext, username, password, role);

            if (null != token)
            {
                return(new JsonResult(token));
            }
            else
            {
                return(NotFound());
            }
        }
        public async Task <IActionResult> Login([FromBody] LoginAPIModel loginModel)
        {
            Microsoft.AspNetCore.Identity.SignInResult result = await _signInManager.PasswordSignInAsync(
                loginModel.UserID, loginModel.Password, true, lockoutOnFailure : false);

            if (result.Succeeded)
            {
                _logger.LogInformation(1, "User logged in.");

                var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_settings.Value.SecretKey));
                var options    = new TokenProviderOptions
                {
                    Audience           = "MuscleFellowAudience",
                    Issuer             = "MuscleFellow",
                    SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
                };
                TokenProvider tpm   = new TokenProvider(options);
                TokenEntity   token = await tpm.GenerateToken(HttpContext, loginModel.UserID, loginModel.Password);

                if (null != token)
                {
                    return(new JsonResult(token));
                }
                else
                {
                    return(NotFound());
                }
            }

            if (result.IsLockedOut)
            {
                _logger.LogWarning(2, "User account locked out.");
                return(Ok("Lockout"));
            }
            else
            {
                _logger.LogWarning(2, "Invalid login attempt.");
                return(Ok("Invalid login attempt."));
            }
        }
        public async Task <IActionResult> Login([FromBody] LoginViewModel model)
        {
            if (ModelState.IsValid)
            {
                AppUser user = await _userManager.FindByEmailAsync(model.Email);

                Identity.SignInResult result = await _signInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, false);

                if (result == Identity.SignInResult.Success)
                {
                    string _token = tokenProvider.GenerateToken(user);
                    if (_token != null)
                    {
                        //Save token in session object
                        HttpContext.Response.Cookies.Append("JWToken", _token);
                        HttpContext.Session.SetString("JWToken", _token);
                    }
                    return(StatusCode(StatusCodes.Status200OK, _token));
                }
            }
            return(StatusCode(StatusCodes.Status500InternalServerError, "Invalid user"));
        }
        public ActionResult <dynamic> Authenticate([FromBody] LoginDTO model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = _repository.GetByNameAndPassword(model.Login, model.Password);

            if (user == null)
            {
                return(Unauthorized(new { Error = "Invalid user!" }));
            }

            var token = TokenProvider.GenerateToken(_mapper.Map <UserDTO>(user));

            return(new
            {
                User = user.Login,
                token
            });
        }
Exemple #19
0
        public async Task <User> Login(LoginModel obj)
        {
            var userList = await Task.Run(() => _context.User.ToList());              //(u => u.UserName == obj.Username && u.Password == obj.Password);

            User user = null;

            foreach (var item in userList)
            {
                if (item.UserName == obj.Username && item.Password == obj.Password)
                {
                    user = item;
                }
            }
            if (user != null)
            {
                user.Token = TokenProvider.GenerateToken(user);
                user.Role  = new Role()
                {
                    RoleName = "admin", Id = 1
                };
                return(user);
            }
            return(null);
        }
Exemple #20
0
        public async Task <IActionResult> RefreshToken(string token)
        {
            CommonResult  result        = new CommonResult();
            TokenProvider tokenProvider = new TokenProvider(_jwtModel);

            if (!string.IsNullOrEmpty(token))
            {
                JwtSecurityToken jwtToken = new JwtSecurityTokenHandler().ReadJwtToken(token);
                #if DEBUG
                Log4NetHelper.Debug(jwtToken.ToJson());
                #endif
                if (jwtToken != null)
                {
                    //根据应用获取token
                    if (jwtToken.Subject == GrantType.ClientCredentials)
                    {
                        TokenResult tresult   = new TokenResult();
                        var         claimlist = jwtToken?.Payload.Claims as List <Claim>;
                        string      strHost   = Request.Host.ToString();
                        APP         app       = _iAPPService.GetAPP(claimlist[0].Value);
                        if (app == null)
                        {
                            result.ErrCode = "40001";
                            result.ErrMsg  = ErrCode.err40001;
                        }
                        else
                        {
                            if (!app.RequestUrl.Contains(strHost) && !strHost.Contains("localhost"))
                            {
                                result.ErrCode = "40002";
                                result.ErrMsg  = ErrCode.err40002 + ",你当前请求主机:" + strHost;
                            }
                            else
                            {
                                TokenResult tokenResult = tokenProvider.GenerateToken(GrantType.ClientCredentials, app.AppId, app.AppSecret);
                                result.ResData = tokenResult;
                                result.ErrCode = "0";
                                result.Success = true;
                            }
                        }
                    }
                    // 用户账号密码登录获取token类型
                    if (jwtToken.Subject == GrantType.Password)
                    {
                        var  claimlist = jwtToken?.Payload.Claims as List <Claim>;
                        User user      = await userService.GetByUserName(claimlist[2].Value);

                        TokenResult tokenResult = tokenProvider.LoginToken(user, claimlist[0].Value);
                        result.ResData = tokenResult;
                        result.ErrCode = "0";
                        result.Success = true;
                    }
                }
                else
                {
                    result.ErrMsg  = ErrCode.err40004;
                    result.ErrCode = "40004";
                }
            }
            else
            {
                result.ErrMsg  = ErrCode.err40004;
                result.ErrCode = "40004";
            }
            return(ToJsonContent(result));
        }