public JsonResult Refresh([FromBody] AppTokenModel refreshModel)
        {
            var token        = refreshModel.AccessToken;
            var refreshToken = refreshModel.RefreshToken;

            var principal         = JwtHelper.GetPrincipalFromExpiredToken(token);
            var username          = principal.Identity.Name;
            var savedRefreshToken = _refreshTokenRepository.Get(username); //retrieve the refresh token from a data store

            if (savedRefreshToken != refreshToken)
            {
                throw new SecurityTokenException("Invalid refresh token");
            }

            var newJwtToken     = JwtHelper.GenerateToken(principal.Claims);
            var newRefreshToken = RefreshTokenHelper.GenerateRefreshToken();

            _refreshTokenRepository.Delete(username, refreshToken);
            _refreshTokenRepository.Save(username, newRefreshToken);

            return(Json(new AppTokenModel
            {
                AccessToken = newJwtToken,
                RefreshToken = newRefreshToken
            }));
        }
        public IActionResult Refresh([FromBody] RefreshTokenModel refreshToken)
        {
            try
            {
                var principal = GetPrincipalFromExpiredToken(refreshToken.Token);

                var username          = principal.Identity.Name;
                var savedRefreshToken = "";
                savedRefreshToken = _userService.GetUserRefreshToken(username); //retrieve the refresh token from a data store
                if (savedRefreshToken != refreshToken.RefreshToken)
                {
                    return(Ok(new { Status = PublicResultStatusCodes.NotAuthorized }));
                }

                var newJwtToken     = _jwtTokenGenerator.GenerateAccessTokenWithClaimsPrincipal(username, principal.Claims);
                var newRefreshToken = RefreshTokenHelper.GenerateRefreshToken();
                _userService.SaveUserRefreshToken(username, newRefreshToken);


                return(Ok(new
                {
                    Status = PublicResultStatusCodes.Done,
                    Data = new List <object> {
                        new{ RefreshToken = newRefreshToken,
                             Token = newJwtToken.AccessToken,
                             ValidTokenTimeInMinutes = _token.ValidTimeInMinutes,
                             ValidDateTimeToken = DateTime.Now.AddMinutes(_token.ValidTimeInMinutes) }
                    }
                }));
            }
            catch (SecurityTokenException ex)
            {
                return(Ok(new { Status = PublicResultStatusCodes.NotAuthorized }));
            }
        }
        public JsonResult Token([FromBody] Form form)
        {
            var username = form.UserName;
            var password = form.Password;

            var identity = GetIdentity(username, password);

            if (identity == null)
            {
                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return(Json("Invalid username or password."));
            }

            var encodedJwt   = JwtHelper.GenerateToken(identity.Claims);
            var refreshToken = RefreshTokenHelper.GenerateRefreshToken();

            _refreshTokenRepository.Delete(username);
            _refreshTokenRepository.Save(username, refreshToken);

            var response = new AppTokenModel
            {
                AccessToken  = encodedJwt,
                RefreshToken = refreshToken,
                Username     = identity.Name
            };

            return(Json(response));
        }
Exemple #4
0
        private void HashNewUserPassword(ref User user, string username)
        {
            if (!string.IsNullOrEmpty(username))
            {
                var currentUser = _repository.GetUserByUsername(username);
                user.IDEntryUser = currentUser.IDEntryUser;
                user.EntryUser   = currentUser.Account;
            }
            user.EntryDate    = DateTime.Now;
            user.IsActive     = true;
            user.RefreshToken = RefreshTokenHelper.GenerateRefreshToken();
            user.Password     = string.IsNullOrWhiteSpace(user.Password) ? user.Password : "";
            var hashHelper = new HashHelper(user.Password);

            user.Password                 = hashHelper.Hash;
            user.SaltedPassword           = hashHelper.Salt;
            user.LatestPasswordChangeDate = DateTime.Now;
        }