The Blues took an early lead at the Salt Lake Stadium as Sivasakthi Narayanan expertly lobbed Phurba Lachenpa from Aleksandar Jovanovic's ball over the top. However, the Islanders responded around the half-hour mark after Gurpreet Singh Sandhu pushed Greg Stewart's shot back into the danger area.
Lalengmawia Ralte pounced to score his first goal for Mumbai City by guiding the ball home from close range.
Both teams pieced together some good moves in the second half as well before Bengaluru reclaimed the lead in the 61st minute. Sunil Chhetri's corner was met with a resounding header from Alan Costa, which left Phurba Lachenpa in goal helpless.
Mumbai City threw on almost every attacker at their disposal in search of an equalizer in the final half an hour. However, Simon Grayson's resilient unit held on to secure the win and with it, all three Durand Cup trophies.
Lallianzuala Chhangte won the Golden Boot while Stewart took home the Player of the Tournament award.
Here are the player ratings for both teams from an entertaining summit clash:
Mumbai City FC
Phurba Lachenpa - 6.5/10
Lachenpa made a couple of excellent saves to deny Bengaluru but could do nothing about either goal.
Mandar Rao Desai - 6/10
Desai began the game brightly and enjoyed plenty of space on his flank, whipping a few dangerous crosses into the box. However, his impact waned after the break.
Rostyn Griffiths - 7/10
Griffiths was fantastic in a difficult outing for Mourtada Fall. He made a few crucial tackles and clearances across both halves to keep Mumbai City in the game while also posing an aerial threat from set-pieces.
Mourtada Fall - 5.5/10
Fall looked uncharacteristically shaky throughout the match and failed to deal with a long ball forward for Narayanan's goal. He made a couple of errors in the second half as well before being replaced.
Sanjeev Stalin - 5/10
Stalin made very little impact on proceedings on both ends of the pitch and was also sat down by Chhetri, with Lachenpa's save sparing him the blushes.
Vinit Rai - 5.5/10
Rai struggled to impose himself as Bengaluru dominated the midfield battle, though he did come close to scoring after an excellent run. He failed to mark Costa from easily getting above him to head home the Blues' second goal from a corner.
Lalengmawia Ralte - 7/10
Ralte was in the right place at the right time to score his maiden goal for Mumbai City. He sprayed the ball around well in the first half but the Blues kept his impact to a minimum after the break.
Ahmed Jahouh - 6.5/10
Jahouh endured a quiet first half with a couple of errors but was much better in the second half. His set-piece delivery hasn't reached the levels it did last season but was much better in this game compared to previous matches at the Durand Cup.
Bipin Singh - 5.5/10
Bipin Singh worked hard but was kept quiet by Bengaluru's five-man backline barring a couple of promising moments.
Greg Stewart - 6/10
While Stewart's shot led to Mumbai City's goal, he endured a largely off night by his lofty standards. The Scot's free-kicks mostly hit the wall and he was shrugged off the ball a tad too easily at times by Bengaluru.
He improved after Noguera came on but couldn't provide the magic his team needed.
Lallianzuala Chhangte - 6/10
Like Stewart, Chhangte also endured a quiet night largely due to Bengaluru's midfield and full-backs working well in tandem. He put a couple of sighters wide and also played some half-decent crosses, but couldn't really trouble the Blues.
Alberto Noguera - 7/10
Noguera instantly changed the outlook for Mumbai City, adding energy and drive to their midfield. Most of their chances in the second half came through him and he also hit the post following a fantastic run forward.
Mehtab Singh - 6/10
Mehtab Singh offered more solidity in defense than Fall and eased some pressure off Griffiths' shoulders.
Gurkirat Singh - 5.5/10
Gurkirat Singh struggled to really impact the game after coming on and couldn't link up with his strike partners.
Vikram Pratap Singh - 6/10
Pratap Singh won a foul near the box late on but didn't do much else.
Gurpreet Singh Sandhu - 6/10
Sandhu commanded his backline well and was good with his feet. However, he should've done much better with Mumbai City's goal. In addition to pushing Stewart's shot straight back into the danger area, he also let Ralte's shot slip under his fingers and will be disappointed on both counts.
Alan Costa - 7.5/10
Costa leapt above Rai to head home Bengaluru's winner from Chhetri's excellent corner. He was also solid in defense and often charged forward to join the attack in a thorough display.
Sandesh Jhingan - 7.5/10
Jhingan put in another solid performance as he and his fellow centre-backs kept Mumbai City's talented frontline quiet. While he made a couple of unnecessary fouls in the final half an hour, the defender also made multiple important clearances and blocks.
Aleksandar Jovanovic - 8/10
Jovanovic was unerring with his long passes, with one of them leading to Bengaluru's first goal. He was also excellent with his positional awareness and came up with some big interventions across both halves.
Naorem Roshan Singh - 6/10
Roshan Singh did well to keep Chhangte quiet but his deliveries in the final third from set-pieces and otherwise weren't up to scratch.
Jayesh Rane - 6.5/10
Rane offered plenty of energy in midfield and pressed Mumbai City's midfield. He also created one excellent chance for Chhetri, though he didn't contribute much in attack otherwise.
Bruno Ramires - 7.5/10
Ramires was once again key to Bengaluru keeping their opponents' creativity in check. Like he did in the semifinal against Hyderabad FC, the midfielder stuck to Mumbai City's best player in Stewart and didn't give him too much space to work with.
The Islanders struggled to cope with his physicality while he was also largely tidy with his passes.
Prabir Das - 6/10
Mumbai City didn't allow Das to venture forward as frequently as he would've liked but he did fairly well to keep Bipin Singh quiet for most of the contest.
Sunil Chhetri - 7/10
Chhetri missed a couple of good chances, forcing decent saves from Lachenpa and putting a shot just inches wide of the post. However, he already seems to be forming a good partnership with Narayanan and Roy Krishna.
The Indian skipper got the assist for Costa's winner with an excellent corner, which ultimately helped him add one of the only trophies missing from his stacked cabinet.
Roy Krishna - 6/10
Krishna made a couple of delightful dummies and linked up well with Chhetri and Narayanan. However, he didn't trouble Mumbai City's backline as much as he would've wanted.
Sivasakthi Narayanan - 8/10
Narayanan scored a stunning goal, lobbing the ball over Lachenpa to give Bengaluru the lead in arguably the biggest game of his short career. He also created a couple of good chances which Chhetri and Roy Krishna failed to take, while his movement and close control caused Mumbai City several problems.
Parag Shrivas - 7/10
Shrivas shored up the defense after coming on, making a couple of vital clearances to help Bengaluru seal the win.
Rohit Kumar - 6.5/10
Kumar got stuck in and pressed Mumbai City into passing the ball sideways, though his own passing was a bit inconsistent.
Udanta Singh - 7/10
Udanta Singh made a fantastic cameo off the bench. In addition to starting the move which led to an excellent chance, he also carried out his defensive duties brilliantly.
Hira Mondal - 7/10
Mondal carried on from where Roshan left off defensively and kept Chhangte and Gurkirat Singh quiet in addition to booting the ball up the pitch when needed.
Namgyal Bhutia - 6/10
Bhutia was brought on to help Bengaluru get the ball far away from their goal and helped do that with some clearances upfield.