Luis Enrique’s men, who completed a 5-3 aggregate victory at the Allianz Arena, were handed an early scare when Medhi Benatia headed Bayern into a seventh-minute lead but two away goals from Neymar completed a first-half turnaround that effectively killed off home hopes.
Bayern Munich produced a comeback of their own in the second half thanks to goals from Robert Lewandowski and Thomas Muller, but it was not enough to stop the La Liga leaders from booking their place in next month’s final at the Olympic Stadium in Berlin.
Barcelona, who kept their La Liga, Copa del Rey and Champions League treble dream alive, will attempt to win their fifth European Cup and first since 2011 against either Real Madrid or Juventus, who play on Wednesday evening – live on Sky Sports.
Bayern made the perfect start as they looked to claw back the three-goal deficit as Benatia was gifted a free header to score from Xabi Alonso’s corner.
But their joy did not last long as Enrique’s side responded in emphatic fashion with Lionel Messi picking out Luis Suarez, who squared the ball for Neymar to tap the ball into an empty net.
Bayern, whose lead lasted just eight minutes, continued to probe in search of the four unanswered goals they now needed but Muller and Lewandowski both found Marc-Andre ter Stegen in excellent form.
Those wasted chances were to prove costly as Suarez broke clear in the 29th minute and kept his composure to pick out Neymar in space at the far post. The Brazilian picked his spot to beat Manuel Neuer at his near post and send Barcelona a further step closer to the final.
With Bayern now needing a miracle, Enrique took the precaution to take off Suarez at the break after he felt some discomfort in his left hamstring. The former Liverpool striker was replaced by Pedro but it was Bayern going in search of goals as Juan Bernat tried to dance his way through the Barcelona defence before firing a long-range effort wide.
Pep Guardiola’s side were back in it with half an hour remaining as Lewandowski produced a moment of magic to beat Javier Mascherano just inside the penalty area before curling a shot beyond the diving Ter Stegen and into the far corner.
The goal lifted Bayern and though Enrique responded to Barca jitters by bringing on Jeremy Mathieu for Ivan Rakitic, the hosts grabbing a third with just 15 minutes to play when Muller stroked the ball home from the edge of the area.
The German international retrieved the ball from the net and proceded to whip the home crowd into a frenzy but ultimately they were left with far too much to do.
Barcelona threw on Xavi immediately after the goal for his 150th Champions League appearance – the most for an outfield player in the competition – but it did not stop Bayern threatening as Lewandowski went close with a deflected shot.
The visitors continued to soak up pressure and with time running out they nearly wrapped things up with a goal of their own as Neymar wasted a hat-trick opportunity trying to set up Messi up with just Neuer to beat.
But it did not matter as Enrique’s men held on to their 5-3 aggregate advantage to book their place in a first Champions League final since beating Manchester United at Wembley in 2011 under Guardiola.
They could now face El Clasico rivals Real Madrid in Berlin on June 6 but Carlo Ancelotti’s men must first turn around a 2-1 deficit against Serie A champions Juventus at the Bernabeu.