Juventus lost their Serie A crown last season to Inter Milan and also fell to an Italian Super Cup defeat by their northern rivals in January.
Sitting fourth in Serie A, Juventus’s hopes of avoiding a season without a trophy for the first time since 2011 will likely be played out at Rome’s Stadio Olimpico on May 11.
Juve took control of the semi-final against their Tuscany rivals after Lorenzo Venuti’s late own goal in the first leg in Florence.
On Wednesday, former Fiorentina winger Federico Bernardeschi fired the hosts ahead after half an hour, with Danilo adding a second just before the final whistle.
Fiorentina could thank goalkeeper Bartlomiej Dragowski for denying ex-Fiorentina striker Dusan Vlahovic twice in the first half-hour, but Bernardeschi volleyed home the opening goal.
Juventus goalkeeper Mattia Perin saved headers from Arthur Cabral and Lucas Martinez Quarta either side of the break.
Denis Zakaria missed the chance to double Juve’s lead on the night, hitting the woodwork after the interval.
An Adrien Rabiot goal was then ruled offside before Juan Cuadrado set up Danilo to score late on as Juve maintained their bid for a record-extending 15th Italian Cup.
On Tuesday, Lautaro Martinez scored twice as Inter Milan beat city rivals AC Milan 3-0, after a goalless first leg, as the seven-time winners look to reclaim a trophy they last won in 2011.