public async Task <UcExchangeRefreshTokenResponse> Handle(UcExchangeRefreshTokenRequest message) { var claimsPrincipal = this.jwtTokenValidator.GetPrincipalFromToken(message.AccessToken, message.SigningKey); var response = new UcExchangeRefreshTokenResponse(); if (claimsPrincipal != null) { var id = claimsPrincipal.Claims.First(x => x.Type == "id"); var user = await this.userRepository.GetSingleBySpec(x => x.IdentityId == id.Value); if (user.HasValidRefreshToken(message.RefreshToken)) { var jwtToken = await this.jwtFactory.GenerateEncodedToken(user.IdentityId, user.UserName); var refreshToken = this.tokenFactory.GenerateToken(); user.RemoveRefreshToken(message.RefreshToken); user.AddRefreshToken(refreshToken, user.Id); await this.userRepository.Update(user); response = new UcExchangeRefreshTokenResponse(jwtToken, refreshToken, true); return(response); } } response.Message = "Invalid token"; return(response); }
public async Task <ActionResult> RefreshToken([FromBody] RefreshTokenRequest request) { if (!this.ModelState.IsValid) { return(this.BadRequest(this.ModelState)); } var useCaseRequest = new UcExchangeRefreshTokenRequest(request.AccessToken, request.RefreshToken, this.authSettings.SecretKey); var result = await this.exchangeRefreshTokenUseCase.Handle(useCaseRequest); var contentResult = new JsonContentResult { StatusCode = (int)(result.Success ? HttpStatusCode.OK : HttpStatusCode.BadRequest), Content = result.Success ? JsonSerializer.SerializeObject(new TokensResponse(result.AccessToken, result.RefreshToken, null)) : JsonSerializer.SerializeObject(result.Message) }; return(contentResult); }