Media playback is not supported on this device
Skipper Morgan made 107 from 93 deliveries and Moeen Ali an unbeaten 77 from 51 to get the home side to 339-6.
South Africa were well placed at 145-1, but were bowled out for 267 with Chris Woakes taking 4-38.
England will seal the three-match series with victory at Southampton on Saturday (11:00 BST).
After routine victories over Ireland, world number ones South Africa present much sterner opposition for England in the build-up to the Champions Trophy, which begins on 1 June.
With IPL trio Ben Stokes, Jos Buttler and Woakes back in the side - and the in-form Jonny Bairstow omitted as expected - England's powerful batting took full advantage of being put in on a flat surface under glorious sunshine.
Though they wobbled after a strong start, Morgan and man-of-the-match Moeen took England to the highest ODI total at Headingley and their 20th in excess of 300 since the 2015 World Cup.
For a time, their attack looked vulnerable - improvement is likely to be needed in the Champions Trophy - but a series of poor South African strokes helped England's cause.
Media playback is not supported on this device
England were also guilty of some recklessness. Alex Hales and Joe Root both fell to Andile Phehlukwayo when well set, before Stokes and Buttler went in the space of 10 balls to leave the hosts 198-5 in the 35th over.
The wristy Morgan, with flays through the off side and power on the leg, had already passed 50, but Moeen looked uncomfortable against the short ball.
However, after Morgan heaved Phehlukwayo over the mid-wicket fence, England charged.
Moeen launched leg-spinner Imran Tahir for three sixes in an over to bring up a 35-ball half-century and Morgan reached his 10th ODI century for England with his fifth maximum.
Though Morgan was held at long-off from the impressive pace bowling of Chris Morris, Moeen hit the same bowler for six from the last delivery of the innings to make a total of 102 runs from the final 10 overs.
Media playback is not supported on this device
There is a suspicion that England's bowling does not match the strength of their batting in ODIs. Indeed, while England have scored more runs per over than any other side since the 2015 World Cup, they have also conceded more than all but Sri Lanka.
Here, Hashim Amla and Faf du Plessis looked set to exploit the England attack, not missing an opportunity to punish anything marginally short or wide.
They shared a stand of 112 until Mark Wood, otherwise expensive, returned to trap Amla lbw on review and, in the next over, Liam Plunkett had Du Plessis caught behind.
JP Duminy and David Miller both hit poor deliveries straight to the fielder on the leg-side boundary and Morris was caught reverse sweeping, but South Africa remained dangerous so long as AB de Villiers was at the crease.
The Proteas skipper, the number one ODI batsman in the world, had just begun to open his shoulders when he lofted Moeen to Plunkett at deep mid-wicket.
As he departed, so too did South Africa's hopes, with a bad day for the tourists capped by a fine for a slow over-rate. De Villiers lost 20% of his match fee and the rest of the team 10%.
England captain Eoin Morgan on TMS: "It was a pretty good day at the office for us. Playing against a strong South Africa team and putting in an all-round performance was brilliant.
"I have felt good for a while. I didn't play as much in the IPL as I would have liked but I got a few runs in the Ireland game and to continue that here is a good feeling.
"If Moeen Ali didn't get any runs and had a bad day, I'd probably pick him again. I have that much confidence in the guy. He's made some huge contributions for us over the last couple of years and beyond that."
Man of the match Moeen Ali on TMS: "To get us to 339 in the end, I was very pleased with that. We finished well with the momentum. We bat all the way down so I gave myself a bit of a chance. I backed my game a bit more today - in the past sometimes I've not done that.
"I've not been batting or bowling well recently. Paul Farbrace gave me a few tips with my batting and that really helped me today."
South Africa captain AB de Villiers: "England played phenomenally well with the bat in hand. Morgan really dominated with the hundred and manipulated us really well.
"We didn't bat well enough, we definitely should have come a lot closer. We just didn't get partnerships going tonight."
Former England batter Ebony Rainford-Brent on TMS: "England have still got a lot of room for improvement but I'm very impressed with how they've approached today. Eoin Morgan has the awareness of the game and the gaps. He'll have a gameplan within seconds, and he'll free his arms. He's in fine form leading in to that Champions Trophy."
A brilliant Eoin Morgan century led England to a 72-run victory over South Africa in the first one-day international at Headingley.