Braga capitalised on defensive errors from Porto to take a two-goal lead courtesy of Rui Fonte and Josue, but Andre Silva scored twice -- including a 91st-minute equaliser -- to force extra-time.
However, Marcelo Goiano converted the winning spot-kick after Hector Herrera and Maxi Pereira had both missed for Porto as Braga lifted the trophy for the first time since 1966.
The defeat rounded out a miserable season for Porto who finished third in the league behind Benfica and Sporting Lisbon and haven't won a title since 2013.