Dortmund was the superior side during a captivating yet goalless first half, forcing Manual Neuer into a succession of saves - though opposite number Roman Weidenfeller was also called into action more than once.
With an hour gone, Mario Mandzukic put the Bavarians ahead from close range, but a clumsy foul by Dante on Marco Reus allowed Ilkay Gundogan to level the scores from the penalty spot eight minutes later.
But with one minute remaining in regulation time, Arjen Robben stole in to squeeze the ball over the line, and ensure that Bayern Munich took home the trophy that eluded it in 2010 and 2012.
Mandzukic shook off competition from Mario Gomez to lead the line for the Bavarians, and in defense, Jerome Boateng edged out Daniel Van Buyten to partner Dante.
With Mario Gotze unable to face his future club due to a hamstring injury, Kevin Grosskreutz began on the flanks for BVB, while Mats Hummels recovered from a minor ankle complaint to start at the back.
Amid an electric atmosphere, Dortmund bossed the opening exchanges, and with 11 minutes gone, Jakub ‘Kuba’ Blaszczykowski delivered a sign of things to come with a half volley that flew off target.
Moments later, Robert Lewandowski, after overrunning an earlier break, drew the first save of the game from Manuel Neuer, who acrobatically yet securely diverted his 20-yard piledriver over the bar.
Kuba was quickly at it again, calling Neuer into action at his near post, and the Bayern keeper’s reflexes were tested further when Reus and Sven Bender angled low efforts on target in quick succession.
Dortmund clearly had its Bundesliga rival on the ropes, but breathed a sigh of relief itself 25 minutes in when Weidenfeller reacted splendidly to tip away Mandzukic’s towering header.
And the BVB No.1 did just as well to race off his line and deny Robben, who broke clear but ignored his teammates to shave an attempt at goal.
Dante then picked up the first booking of the game for bringing down Kuba, but Franck Ribery would escape punishment for raising an arm to Lewandowski.
Both keepers remained in the spotlight for the remainder of the half, Neuer denying Lewandowski from in close, before Robben botched another one-on-one, firing right at Weidenfeller after a miscue by Hummels.
But Dortmund struggled to match the heights of its enterprising first half, as Bayern seemed a far more purposeful outfit after the break.
And right on the hour mark, Mandzukic would come up with the goods. Robben did the hard work, latching onto a smart Ribery feed to beat Weidenfeller to the byline and square to the Croatian, who guided the ball over the line.
But the lead would not last long. Dante caught Reus in the stomach with his leg inside the area, leaving the referee with little choice but to award a penalty – though the Brazilin was lucky not to see a second yellow card.
Lewandowski, who missed a penalty in the last meeting between these two sides, took a backseat to Gundogan, who drilled confidently into the bottom corner, sending Neuer the wrong way.
It should have been 2-1 to Bayern in the 71st minute after a nifty move and cross by Thomas Muller found Robben waiting to tap into an empty net at the far post, but somehow, Neven Subotic kept up to slide the ball away magnificently.
The title was there for the taking as the match entered its closing stages, and Weidenfeller had to remain on his toes twice to beat away long-range efforts from David Alaba and Bastian Schweinsteiger.
And in the 89th minute, Robben did just that, breaking the offside trap to beat Weidenfeller with a weak shot, and finally send the trophy back again to the Allianz Arena.
Follow GOAL.COM USA on