Victory over the Proteas, the world's number-one ranked ODI side, gave England a morale boost just a week before they host the Champions Trophy tournament featuring the world's top eight 50-over sides and put them 1-0 up in this three-match series.
South Africa, set 340 to win, made steady progress while the experienced Hashim Amla and Faf du Plessis shared a second-wicket stand of 112.
But they both fell in quick succession to leave the Proteas 149 for three.
South Africa's innings never recovered and they were dismissed for 267 with five overs to spare.
Earlier, Morgan's 107 -- his 10th ODI hundred for England -- was the cornerstone of the hosts' 339 for six.
England had slumped to 198 for five but Morgan's sixth-wicket stand of 117 with fellow left-hander Moeen Ali, who made a dashing 77 not out on his return, turned the tide. Both batsmen struck five sixes apiece.
Ali, who ended England's innings with a six off Chris Morris, was named man-of-the-match after also taking two wickets with his off-spin.
"It was a pretty good day at the office for us," said Morgan.
"The partnerships we built, gave us the best opportunity to get a par score and beyond."
- 'Phenomenal' -
South Africa skipper AB De Villiers accepted his side had been well beaten, telling Sky Sports: "England played phenomenally well with the bat in hand. 'Morgs' really dominated with the hundred.
"We didn't bat well enough, we definitely should have come a lot closer. We lost Faf and Hash in close succession and that probably stopped us a little bit."
De Villiers, however, refused to read too much into this result ahead of the Champions Trophy.
"We all have a bit of pressure on us and we're all contenders to win that trophy," he said.
"They played better tonight and hopefully we'll win the next one."
De Villiers chose to field first on a sunny day seeingly ideal for batting. His decision was quickly rewarded when Jason Roy (one) was caught behind off left-armer Wayne Parnell in just the second over.
Both Alex Hales and England Test skipper Joe Root made runs on an easy-paced pitch before they each fell to Andile Phehlukwayo.
The 21-year-old seamer struck with his first ball Wednesday when Hales, on 61, flat-footedly chased a wide ball and got a thin edge to wicket-keeper Quinton de Kock.
Phehlukwayo then undid Root (37) with a bouncer the local hero mishooked to Amla. But Morgan twice lofted Phehlukwayo for six.
Ben Stokes, back from impressing in the Indian Premier League, holed out for 30 and fellow IPL star Jos Buttler, replacing in-form Yorkshireman Jonny Bairstow, glanced to short fine leg on seven.
But Morgan, who struggled for game time in this season's IPL, went to his hundred in grand fashion when he hooked fast bowler Kagiso Rabada over long leg for six.
He holed out off Morris soon afterwards to end a 93-ball innings but Ali kept going as England plundered 102 runs in the last 10 overs.
England then had an early breakthrough when dangerman de Kock fell for just five after skying Chris Woakes to opposing keeper Buttler. But Amla made a typically elegant near run-a-ball 73.
Fast bowler Mark Wood, eventually had Amla lbw but only after England successfully reviewed Australian umpire Rod Tucker's not out call.
There was rather less doubt when du Plessis was caught behind off Yorkshire fast bowler Liam Plunkett.
De Villiers looked good while making 45 off 38 balls, including seven fours, but he fell in similar fashion to several team-mates when he holed out off Ali. The match ended when Rabada was caught behind off Woakes, who took four for 38.
Before play, teams and officials were joined by spectators in observing a minute's silence in memory of the victims of Monday's terror attack in nearby Manchester that killed 22 people and injured dozens more.
The series continues at Southampton on Saturday and concludes with next Monday's match at Lord's.