Defender Larrys Mabiala tallied in the 29th minute and Sebastian Blanco converted a free kick in the 75th for the sixth-place Timbers (14-13-7, 49 points), who will visit third-place Real Salt Lake in the first round of the MLS Cup playoffs.
Steve Clark made three saves to help Portland snap a five-game winless skid (0-2-3).
Captain Chris Wondolowski scored in the 39th minute and Daniel Vega turned aside five shots for the Earthquakes (13-16-5, 44 points), who saw their season-high losing streak extend to six matches. They were eliminated from postseason contention after FC Dallas (13-12-9, 48 points) breezed to a 6-0 win over Sporting Kansas City on Sunday.
Asprilla snapped a tie in impressive fashion, beating defender Florian Jungwirth to the inside before unleashing a shot that was denied by Vega. The 27-year-old Asprilla cleaned up his own rebound and tapped the ball into the open net to give Portland a 2-1 lead with his second goal in as many matches.
Blanco gave the Timbers a bit of breathing room in the 75th as his shot sailed over the makeshift wall and past a diving Vega. The goal was Blanco's sixth of the season.
Portland opened the scoring as Jorge Villafana's cross found Mabiala, who contorted his body to send an off-balance left-footed shot from the center of the box inside the left post. The 31-year-old Frenchman's goal was his second of the campaign.
Wondolowski, who was nearly responsible for an own goal earlier in the match, forged a tie in the 39th minute after extending his body while inside the box to head home Cristian Espinoza's cross. The goal was the 36-year-old Wondolowski's team-leading 15th this season and 11th versus Portland in his distinguished MLS career.
Wondolowski nearly opened the scoring in inadvertent fashion in the 26th minute, as Espinoza's shot caromed off his body, requiring Vega to make a diving save.
Portland in, San Jose out as Timbers smash Quakes
Portland clinch a playoff berth and end San Jose's season with a 3-1 win. Watch MLS on ESPN+.