public async Task <ActionResult <ExchangeRefreshTokenResponseDto> > GenerateRefreshToken(
            [FromQuery] ExchangeRefreshTokenRequestDto request)
        {
            var claimsPrincipal = _jwtTokenValidator.GetPrincipalFromToken(request.AccessToken, _authSettings.SecretKey);

            if (claimsPrincipal == null)
            {
                return(BadRequest());
            }
            var userId = claimsPrincipal.Claims.First(c => c.Type == "id");
            var user   = await _mediator.Send(new GetUserByIdQuery(Guid.Parse(userId.Value)));

            if (!user.HasValidRefreshToken(request.RefreshToken))
            {
                return(BadRequest());
            }
            var jwtToken = await _jwtFactory.GenerateEncodedToken(user);

            var refreshToken = _tokenFactory.GenerateToken();
            await _mediator.Publish(new ExchangeRefreshTokenCommand(
                                        user.Id,
                                        refreshToken,
                                        request.RefreshToken));

            return(Ok(new ExchangeRefreshTokenResponseDto(jwtToken, refreshToken, true)));
        }
Пример #2
0
        public async Task <ActionResult <ExchangeRefreshTokenResponseDto> > RefreshToken([FromBody] ExchangeRefreshTokenRequestDto request, [FromServices] IExchangeRefreshTokenUseCase useCase)
        {
            var result = await useCase.Handle(new ExchangeRefreshTokenRequest(request.AccessToken, request.RefreshToken, HttpContext.Connection.RemoteIpAddress?.ToString()));

            if (useCase.HasError)
            {
                return(useCase.ToActionResult());
            }

            return(new ExchangeRefreshTokenResponseDto(result !.AccessToken, result.RefreshToken));
        }