World Champion Michal Kwiatkowski (Etixx-QuickStep) finished third to regain the overall lead in the race from overnight holder of the yellow jersey, Michael Matthews (Orica-GreenEdge).
Porte moves up to second overall at one second, with Thomas in third at three seconds.
Already a winner of Paris-Nice in 2013, Porte is enjoying a renaissance of form after a quiet 2014. This year he has won key stages in the Tour Down Under and Volta ao Algarve, as well as the Australian time trial title.
The day's action started with an attack by Thomas de Gendt (Lotto-Soudal) and Antoine Duchesne (Europcar). They were soon joined by Chris Anker Sorensen (Tinkoff-Saxo), and the trio stayed out front for the majority of the long 204-kilometre stage, collecting up the spoils on the day's eight categorised climbs.
Duchesne dropped out of the break after the second category Côte de La Gimond with 50km to go, but de Gendt and Soresen continued on until being caught before the day's final climb of Croix de Chaubouret. De Gendt came away with the King of the Mountains jersey for his troubles.
Geraint Thomas gives his reaction to the Cycling Independent Reform Commission doping report
As the final ascent set in, riders were quickly being dropped out the back of the bunch. Warren Barguil (Giant-Alpecin) was an early casualty after getting caught in a crash, immediately ruling himself out of playing a part in the day's finale.
Paolo Tiralongo (Astana) was the first to launch an attack, but was soon caught by the peloton led by Sky. Lars Petter Nordhaug and Nicolas Roche both did large turns at the front, keeping the pace high and preventing any further attacks. The reason for that became apparent in the final three kilometres as Thomas launched himself up the road.
The Welshman's acceleration served to splinter the bunch. He was first joined by Jakob Fuglsang (Astana) and Simon Spilak (Katusha), then Porte bridged over from a chase group. Porte subsequently accelerated away, followed by Thomas on his wheel. The Sky duo rode clear of their rivals to take a memorable one-two.
Paris-Nice 2014, stage four: Varennes-sur-Allier to Croix de Chaubouret, 204km
1. Richie Porte (Aus) Sky
2. Geraint Thomas (GBr) Sky
3. Michal Kwiatkowski (Pol) Etixx-Quickstep
4. Jakob Fuglsang (Den) Astana
5. Tejay van Garderen (USA) BMC Racing
6. Rui Costa (Por) Lampre-Merida
7. Tony Gallopin (Fra) Lotto-Soudal
8. Fabio Aru (Ita) Astana
9. Rafael Valls (Spa) Lampre-Merida
10. Simon Spilak (Slo) Katusha
Overall classification after stage four
1. Michal Kwiatkowski (Pol) Etixx-Quickstep
2. Richie Porte (Aus) Sky at 1 sec
3. Geraint Thomas (GBr) Sky at 3 secs
4. Tejay van Garderen (USA) BMC Racing at 27 secs
5. Jakob Fuglsang (Den) Astana at 32 secs
6. Tony Gallopin (Fra) Lotto-Soudal at 38 secs
7. Rui Costa (Por) Lampre-Merida at 41 secs
8. Gorka Izaguirre (Spa) Movistar at 44 secs
9. Tiago Machado (Por) Katusha at 50 secs
10. Rafael Valls (Spa) Lampre-Merida at 51 secs
Thank you for reading 20 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1