Robert Lewandowski scored his 11th league goal as Bayern Munich came from behind to inflict yet another defeat on Dortmund in the Klassiker, as Hansi Flick's side moved three points clear of their fierce rivals in the Bundesliga.
Both sides came into the contest in great league form, level on 15 points, with Bayern in second and Dortmund in third.
Dortmund skipper Marco Reus gave the hosts the lead on the stroke of half-time, rifling home from Raphael Guerreiro's cut-back.
Dortmund cruise past Mainz to book Champions League spot
- Bayern waiting to see extent of Kimmich injury
- Rampant Chelsea go third with comeback victory over Sheffield United
- Messi benching: A sign of unity or division with Koeman?
It was a blow for Bayern, who had a goal controversially chalked off by the Video Assistant Referee, with Lewandowski adjudged to be offside by an agonisingly tight margin, after losing Joshua Kimmich to injury.
But two Bayern goals either side of the break transformed the game. David Alaba levelled the scores in the fourth minute of stoppage time, curling a free-kick into the top corner, via a deflection off Thomas Meunier.
And two minutes after the restart, Lewandowski was on target once more, and there was no doubt about this one as his beautiful glancing header from Lucas Hernandez gave Roman Burki no chance.
Dortmund turned to former Birmingham City teenager Jude Bellingham for his first taste of Der Klassiker, and although the 17-year-old made an impact, Lucien Favre's side couldn't find a way past Manuel Neuer.
With the hosts throwing numbers forward in search of the equaliser, Bayern opened up a two-goal advantage on the break courtesy of substitute Leroy Sane's lovely curled finish.
Erling Haaland endured a frustrating day in front of goal, but he finally found the net to give Dortmund hope with seven minutes to go. Reus then squandered a glorious chance to restore parity at the death, as the reigning champions emerged victorious to move atop of the table, with Dortmund falling to third.
TALKING POINT - Fourth consecutive Klassiker league victory for Bayern
It may only be November, but there is no getting away from the fact that this could be a hugely-damaging defeat for Favre’s men. For the entirety of the Dortmund manager’s tenure, his side have been second best to Bayern, and his results in the Klassiker have left a lot to be desired. He has now lost four consecutive Bundesliga games to their fierce rivals, and it is clear Dortmund suffer from a mental block when faced against their nemesis.
Dortmund were arguably the better side on the day, but their profligacy – again – has cost them dear. Haaland, in particular, was wasteful, while his counterpart Lewandowski could have finished with a hat-trick. The 32-year-old scored Bayern’s second, assisted the third, and had the ball in the net twice more only to be ruled offside.
Lewandowski is undoubtedly in inspirational form, but Flick has an embarrassment of riches in attack, and right now, Bayern look like outscoring any team, in both Europe and the league.
Conte plotting January raid on ex-club Chelsea - Euro Papers
MAN OF THE MATCH - Robert Lewandowski (Bayern)
There is no questioning Haaland's ability, but his much more experienced counterpart delivered a master class in finishing and leading the forward line.
Dortmund: Burki 7, Meunier 6, Akanji 6, Hummels 6, Guerreiro 8, Witsel 6, Delaney 6, Sancho 6 Reus 6, Reyna 7, Haaland 6.. subs: Brandt 5, Bellingham 7.
Bayern Munich: Neuer 7, Sarr 5, Boateng 7, Alaba 7, Hernandez 7, Kimmich 5, Goretzka 7, Gnabry 7, Muller 7, Coman 7, Lewandowski 8.. subs: Tolisso 5, Sane 7, Martinez 5.
45' - GOAL! Dortmund 1-0 Bayern Munich (Marco Reus) : Right on the stroke of half time, we have lift off! Sancho is at the heart of it, sending Guerreiro into the box and he cuts it back for Reus who rifles it past Neuer!
45'+4 GOAL! Dortmund 1-1 Bayern Munich (David Alaba): What a strike from Alaba to level the scores! Gnabry knocks the free-kick short to Muller, who stops it and Alaba curls it into the net, via a deflection off Meunier!
48' - GOAL! Dortmund 1-2 Bayern Munich (Robert Lewandowski): Lewandowski finds the net again - and there's no doubt about this one! Hernandez stands up a cross to find the Poland talisman. It's far from a straight forward finish but with beautiful technique, he glances his header past Burki into the far corner!
80' - GOAL! Dortmund 1-3 Bayern Munich (Leroy Sane): A counter-attack goal straight from the textbook! With Dortmund throwing numbers forward in desperate search of an equaliser, Bayern break to devastating effect. Lewandowski turns creator, playing in Sane who checks inside and curls a shot past Burki.
83' - GOAL! Dortmund 2-3 Bayern Munich (Erling Haaland): This one perhaps isn't done just yet! Guerriero lifts a glorious pass over the top of the high Bayern defence, Haaland's first touch sets him up and he finishes with aplomb!
David Alaba celebrated his 200th win in the Bundesliga in his 272nd match, needing fewer games to reach that milestone than any other player previously.
Man Utd need to pay £60m for Varane - Paper Round
Lewandowski equals Mueller's long-held record with 40th goal of season