Juventus, still missing Cristiano Ronaldo after he tested positive for COVID-19 two weeks ago and still rebuilding under Andrea Pirlo, failed to record a shot on target despite Morata's efforts.
Barca had three chances to take the lead in an extraordinary opening two minutes.
Leonardo Bonucci made a last-gasp tackle to stop Messi, Miralem Pjanic saw a shot parried by Wojciech Szczesny and Antoine Griezmann fired against the post, and it was no surprise when they went ahead in the 14th minute.
Messi found Dembele with a pinpoint crossfield pass and the Frenchman scored with a 20-metre shot which deflected off Federico Chiesa and looped beyond Szczesny.
Morata broke clear and had the ball in the net two minutes later but was offside and suffered the same fate when he volleyed home from Juan Cuadrado's cross.
In between, Messi should have added a second but drove his shot wide of the far post after he was set up by Griezmann's clever backheel.
Barca turned on the style at the start of the second half, penning Juve into their own half with some flowing passing moves.
Juve thought they had equalised again when Morata turned in an acrobatic Cuadrado cross but, after a long VAR check, it was again ruled out because his left heel was offside.
Juventus defender Merih Demiral was sent off for a second booking before Ansu Fati was clipped from behind and Messi emphatically converted the penalty.