Forbort was the first Jets defenceman to score this season. Nikolaj Ehlers scored the eventual game-winner and Trevor Lewis also scored for Winnipeg (6-3-1).
Matthew Tkachuk scored twice for Calgary (4-4-1).
Both clubs played their backup goalies Tuesday following Calgary's 4-3 shootout win Monday.
Winnipeg's Laurent Brossoit made 29 saves for his second win this season, while Calgary counterpart David Rittich stopped 25 shots.
Thursday's rematch in Winnipeg will be the third meeting in four days for the two clubs.
The Jets led by two goals early for the second night in a row, but they defended that lead unlike the previous night when Calgary overtook them in the third period.
Winnipeg blocked 24 shots to Calgary's 10.
"It was one of our more impressive and effortful games on a defensive side of things," Brossoit said.
Forbort led the Jets with five shots on net and scored Winnipeg's second goal for the sixth of his career.
The 28-year-old spent the end of last season and the playoffs with the Flames, who had acquired him at the trade deadline from the Los Angeles Kings.
Winnipeg signed the free agent to a one-year contract in the off-season.
With Rittich pulled for an extra attacker and the Flames pressing for the equalizer, Forbort batted an airborne puck behind Brossoit's head out of danger with 57 seconds remaining.
"I just kind of knew it wasn't gonna be in a good spot no matter what," Forbort said. "It happens pretty quick and you just kind of swat it to get it out of there.
"Felt like I was playing volleyball back in California."
In his third start of the season, Brossoit's workload was light for the first 40 minutes facing 14 shots. He was busy in the third, however, when Calgary pelted him with 17.
Brossoit came out of his net to thwart an all-alone Johnny Gaudreau in the final seconds of the game.
"I had to make an aggressive play," Brossoit said. "I gave a big push toward him and tried to take away as much space as I could and I was lucky enough to get a piece of it."
The Flames were held scoreless on four power-play chances and the Jets went 0-for-2.
"We had a good push in the third, but ... you get down goals every night, it's not a recipe for success, so we've got to just learn from that and come out and be sharper in our detail and we'll be fine," Flames captain Mark Giordano said.
After a scoreless second period, Tkachuk scored his second of the game at 10:53.
Tkachuk was denied by Brossoit on a breakaway. Gaudreau put the rebound off the crossbar and onto the Winnipeg goalie's back for Tkachuk to sweep into the net.
A deft deflection by Ehlers at 13:32 of the first period gave the hosts a 3-1 edge.
Ehlers bunted an airborne puck over Rittich on a Dylan DeMelo point shot for the Dane's sixth goal of the season.
A three-goal burst in a 65-second span started with Lewis's short-handed goal at 6:40, followed by Forbort scoring at 7:10 and Tkachuk at 7:45. Tkachuk tapped in Dillon Dube's cross-ice pass.
Neal Pionk skated the puck zone to zone and dished to Forbort, who beat Rittich high glove side.
Winnipeg's Mason Appleton corralled a Flames giveaway on their own blue-line, skated the puck down low and fed Lewis in the slot to beat Rittich's glove.
The Flames are at home to the Edmonton Oilers on Saturday and face the Jets again Feb. 9 at home.
That will be the only time this season Winnipeg faces the same opponent four games in a row.
Notes: Gaudreau extended his point streak to nine straight games to open the season and is one assist away from a career 300 . . . Blake Wheeler moved into second all-time in franchise games played at 720, passing Toby Enstrom. Bryan Little (843) holds the record.