Prior to the 14th meeting between the two sides, Barcelona had never won in Turin, registering three draws and three defeats.
Dembele’s deflected strike wrong footed Juventus goalkeeper Wojciech Szczesny, though the Bianconeri had three goals ruled out for offside, before Merih Demiral was given his marching orders late on. Messi then stepped up and tucked away a 90th minute penalty to make sure of the three points.
As a result, Juventus are now three points behind Barcelona in the Group G standings, with Dynamo Kiev and Ferencvaros on a point each.
Then Dembele cut in from the right side, onto his stronger left foot, and cracked an effort towards goal, which deflected off Federico Chiesa, looped over Szczesny and landed in the Juventus net.
Juventus twice had the ball in the back of the net, first Alvaro Morata beat Neto but it was ruled out for offside. Then just after the half hour the same thing happened.
It could have been two when Lionel Messi led a Barcelona counter-attack and played in Dembele who was denied by the onrushing Szczesny, who had to make a double save with Griezmann following up.
At the start of the second half, Juventus could barely get the ball from Barcelona, as the Catalans had the Old Lady pinned in their own half, but the Bianconeri thought they had themselves level.
A Chiesa cross was headed away by Frenkie De Jong, but only as far as Juan Cuadrado whose acrobatic effort fell the way of Morata and he side-footed home from close range, but once again it was ruled out for offside.
Griezmann drilled an angled ball just wide, and as the game drew to a close things got worse for Juventus as Demiral was given a second yellow card and subsequently sent off.
The game was put to bed late on when Ansu Fati was brought down by Chiesa and Messi stepped up to double the Blaugrana’s lead.