public async Task <ServiceResponse <RefreshTokenResponse> > RefreshTokenAsync(string accessToken, string refreshToken) { if (string.IsNullOrWhiteSpace(accessToken)) { ErrorResultToReturn = new ErrorResult("Pusty access token"); throw new RestException(HttpStatusCode.BadRequest, ErrorResultToReturn); } if (string.IsNullOrWhiteSpace(refreshToken)) { ErrorResultToReturn = new ErrorResult("Pusty refresh token"); throw new RestException(HttpStatusCode.BadRequest, ErrorResultToReturn); } var validatedToken = _jwtGenerator.GetPrincipalFromToken(accessToken); if (validatedToken == null) { ErrorResultToReturn = new ErrorResult("Nieprawidłowy token"); throw new RestException(HttpStatusCode.BadRequest, ErrorResultToReturn); } var storedRefreshToken = await Context.RefreshTokens.SingleOrDefaultAsync(x => x.Token == refreshToken); var validationResult = _jwtGenerator.ValidateRefreshToken(storedRefreshToken, validatedToken); if (validationResult.Any()) { ErrorResultToReturn = new ErrorResult(Errors.AuthErrors.AnErrorOccuredWhileAuthenticating, validationResult.ToArray()); throw new RestException(HttpStatusCode.BadRequest, ErrorResultToReturn); } storedRefreshToken.Used = true; Context.RefreshTokens.Update(storedRefreshToken); await SaveChangesAsync(new[] { "Wystąpił bład podczas aktualizowania tokena" }); var user = await UserManager.FindByIdAsync(_jwtGenerator.GetUserIdFromToken(validatedToken)); if (user == null) { ErrorResultToReturn = new ErrorResult(Errors.AccountErrors.UserNotFound); throw new RestException(HttpStatusCode.BadRequest, ErrorResultToReturn); } var tokens = await _jwtGenerator.CreateTokenAsync(user); return(new ServiceResponse <RefreshTokenResponse>(HttpStatusCode.OK, new RefreshTokenResponse { RefreshToken = tokens.RefreshToken, Token = tokens.Token })); }
//public Task<bool> Logout() //{ // throw new NotImplementedException(); //} public async Task <RefreshTokenResponse> RefreshTokenAsync(string accessToken, string refreshToken) { if (string.IsNullOrWhiteSpace(accessToken)) { return(null); } if (string.IsNullOrWhiteSpace(refreshToken)) { return(null); } var validatedToken = _jwtGenerator.GetPrincipalFromToken(accessToken); if (validatedToken == null) { return(null); } var storedRefreshToken = await _context.RefreshTokens.SingleOrDefaultAsync(x => x.Token == refreshToken); var validationResult = _jwtGenerator.ValidateRefreshToken(storedRefreshToken, validatedToken); if (validationResult.Any()) { return(null); } storedRefreshToken.Used = true; _context.RefreshTokens.Update(storedRefreshToken); await _context.SaveChangesAsync(); var user = await UserManager.FindByIdAsync(_jwtGenerator.GetUserIdFromToken(validatedToken)); if (user == null) { return(null); } var tokens = await _jwtGenerator.CreateTokenAsync(user); return(new RefreshTokenResponse { RefreshToken = tokens.RefreshToken, Token = tokens.Token }); }