public async Task <IActionResult> Refresh([FromBody] RefreshRequestModel refreshRequest)
        {
            var principal         = AccessTokenService.GetPrincipalFromExpiredToken(refreshRequest.Token);
            var userId            = principal.Identity.Name;
            var savedRefreshToken = await AccessTokenService.GetRefreshTokenAsync(userId);

            if (savedRefreshToken != refreshRequest.RefreshToken)
            {
                return(BadRequest("Invalid refresh token"));
            }

            string newJwtToken     = null;
            string newRefreshToken = null;

            try
            {
                newJwtToken     = AccessTokenService.GenerateAccessToken(userId);
                newRefreshToken = AccessTokenService.GenerateRefreshToken();

                await AccessTokenService.DeleteRefreshTokenAsync(userId, refreshRequest.RefreshToken);

                await AccessTokenService.SaveRefreshTokenAsync(userId, newRefreshToken);
            }
            catch (Exception e)
            {
                Logger.LogError(e, e.Message);
                return(StatusCode(500));
            }

            return(Ok(new
            {
                token = newJwtToken,
                refreshToken = newRefreshToken
            }));
        }
        public IActionResult AddRereshRequest([FromBody] NewRequestModel newRequest)
        {
            var newRequestId = Guid.NewGuid().ToString();
            var user         = WindowsIdentity.GetCurrent().Name;
            var dbs          = new List <DatabaseLogModel>();

            for (var i = 0; i < newRequest.DatabaseNames.Length; i++)
            {
                var db = new DatabaseLogModel()
                {
                    RefreshRequstId = newRequestId,
                    DatabaseName    = newRequest.DatabaseNames[i]
                };
                dbs.Add(db);
            }

            var request = new RefreshRequestModel()
            {
                Id           = newRequestId,
                Environment  = newRequest.Environment,
                Status       = "Initiated",
                Requestor    = user,
                ScheduleDate = DateTime.Now,
                ScheduledBy  = user,
                Databases    = dbs
            };

            _context.RefreshRequests.Add(request);
            _context.SaveChanges();
            return(Ok(request));
        }
Exemplo n.º 3
0
        public async Task <IActionResult> Refresh(RefreshRequestModel refreshTokenModel)
        {
            var principal         = GetPrincipalFromExpiredToken(refreshTokenModel.token);
            var username          = principal.Identity.Name;
            var savedRefreshToken = _repo.GetRefreshToken(username).Result; //retrieve the refresh token from a data store

            if (savedRefreshToken.Token != refreshTokenModel.refreshToken)
            {
                await _repo.RemoveRefreshToken(username, refreshTokenModel.refreshToken);

                throw new SecurityTokenException("Invalid refresh token");
            }

            if (DateTime.UtcNow > savedRefreshToken.RefreshTokenExpiration)
            {
                await _repo.RemoveRefreshToken(username, refreshTokenModel.refreshToken);

                throw new SecurityTokenException("Invalid token!");
            }


            var newJwtToken     = GenerateAccessToken(principal.Claims);
            var newRefreshToken = GenerateRefreshTokenModel();
            //_repo.RemoveRefreshToken(username, refreshTokenModel.refreshToken);
            await _repo.SaveRefreshToken(username, newRefreshToken);

            return(Ok(new
            {
                token = newJwtToken,
                refreshToken = newRefreshToken
            }));
        }
Exemplo n.º 4
0
        public IActionResult Refresh([FromBody] RefreshRequestModel model)
        {
            IActionResult response = Unauthorized();

            var user = this.ReAuthenticate(model.RefreshToken, out var isReAuthenticated);

            if (isReAuthenticated && user != null)
            {
                // JWT生成
                var tokenSet = this.CreateTokenSet(user);
                response = Ok(tokenSet);
            }

            return(response);
        }
Exemplo n.º 5
0
        public async Task <AuthResultModel> RefreshUserToken(RefreshRequestModel refreshRequest)
        {
            var tokenValidationParameters = new TokenValidationParameters
            {
                ValidateAudience         = false,
                ValidateIssuer           = false,
                ValidateIssuerSigningKey = true,
                IssuerSigningKey         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["App:Auth:Key"])),
                ValidateLifetime         = false
            };

            var tokenHandler = new JwtSecurityTokenHandler();
            var principal    = tokenHandler.ValidateToken(refreshRequest.Token, tokenValidationParameters, out var securityToken);

            if (!(securityToken is JwtSecurityToken jwtSecurityToken) || !jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha256, StringComparison.InvariantCultureIgnoreCase))
            {
                throw new BadRequestException("Invalid token");
            }

            var userId = Guid.Parse(principal.FindFirstValue(ClaimTypes.NameIdentifier));
            var user   = await _userManager.Users.Include(u => u.UserRoles).ThenInclude(ur => ur.Role)
                         .FirstOrDefaultAsync(u => u.Id == userId);

            if (user == null)
            {
                throw new BadRequestException("Invalid token");
            }

            user.RefreshToken = GenerateRefreshToken();
            await _userManager.UpdateAsync(user);

            var roles           = user.UserRoles?.Select(_ => _.Role.Name).ToList();
            var userPermissions = user.UserRoles?.SelectMany(_ => _.Role.Permissions.Split(",")).ToList();

            var resultModel = new AuthResultModel
            {
                Token        = await GenerateUserToken(user),
                Expire       = DateTime.UtcNow.AddDays(7),
                UserId       = user.Id,
                RefreshToken = user.RefreshToken,
                Roles        = roles,
                Permissions  = userPermissions
            };

            return(resultModel);
        }
Exemplo n.º 6
0
        public async Task TokenRefreshes()
        {
            var username = "******";
            var password = "******";

            var authResult = await SignUpUser(username, password);

            var refreshModel = new RefreshRequestModel
            {
                Token        = authResult.Token,
                RefreshToken = authResult.RefreshToken
            };

            var refreshResponse = await PostModel <AuthResultModel, RefreshRequestModel>("/api/v1/auth/refresh", refreshModel);

            AssertSuccesDataResponse(refreshResponse);

            refreshResponse.Data.Token.Should().NotBeNullOrEmpty();
            refreshResponse.Data.RefreshToken.Should().NotBeNullOrEmpty();
            refreshResponse.Data.UserId.Should().NotBeEmpty();
        }
        public async Task <IActionResult> Refresh([FromBody] RefreshRequestModel model)
        {
            RefreshResponseModel result = await _authService.UpdateRefreshTokenAsync(model);

            return(Ok(result));
        }
Exemplo n.º 8
0
 public async Task <BaseResponse <AuthResultModel> > Refresh(RefreshRequestModel model) =>
 await PrepareResponse(_authService.RefreshUserToken, model);
Exemplo n.º 9
0
 public async Task <RefreshResponseModel> UpdateRefreshTokenAsync(RefreshRequestModel model)
 {
     return(await _sessionService.UpdateAsync(model.RefreshToken));
 }