Ryan Jack scored from the halfway line to ensure St Johnstone suffered their second home defeat in four days and Aberdeen eased their relegation fears.
Scott Vernon pounced to score after 13 minutes when goalkeeper Peter Enckelman spilled a Jack drive.
Jack gathered Enckelman's poor clearance to drive home a stunning drive from long range after 79 minutes.
Dons defender Andrew Considine was sent off four minutes later before Marcus Haber headed a stoppage-time reply.
But Craig Brown's side held on to secure their first away win of the season and move three points clear of Hibernian and Dunfermline Athletic at the foot of the Scottish Premier League.
Referee Steven McLean decided to go ahead with the game despite driving rain and strong winds that put paid to two of three Scottish Football League fixtures for safety reasons.
Only 1,600 hardy souls - more than 350 of them having travelled from Aberdeen - were prepared to pay to brave the elements for a game that they could watch in greater comfort on television.
And they were rewarded with an exciting match, the quality of which belied the horrendous conditions.
St Johnstone, who handed Sam Parkin his first start since February in place of Carl Finnigan after the striker's return from a broken ankle, were first to threaten and Chris Millar's swirling shot was fisted away unconvincingly by goalkeeper Jason Brown.
Curling crosses from Chris Clark, who had replaced the suspended Fraser Fyvie in Aberdeen's midfield, heaped pressure on Enckelman on a difficult night for goalkeepers.
The big Finn's attempt to punch clear an inswinging Clark corner struck the back of team-mate Parkin's head and over the crossbar.
Moment's later, David McCracken could only clear a Clark cross into the path of Ryan Jack on the edgoe of the area and, when Enckelman spilled the midfielder's low drive, Vernon was on hand to tap in his seventh goal of the season.
Millar was the early creative force for Saints, for whom Alan Maybury started ahead of David Robertson, and the midfielder's clever chip set up Haber for a run on goal that forced Richard Foster to concede a foul on the edge of the box.
The resulting Liam Craig free-kick was deflected just wide but sparked the midfielder into life.
Craig fired one drive wide, sent a cross-come-shot flashing across the face of goal and floated in a cross to the back post from which Dave MacKay's header deflected off Considine and wide.
St Johnstone were now the more dangerous force and that continued after the break, with MacKay's close-range shot forcing Brown into a fine one-handed block for a corner.
Murray Davidson ought to have levelled the game when put clear by a Craig header, but the Scotland midfielder's lazy lob over Brown drifted several yards over the bar.
The Dons went close to extending their lead against the run of play when Kari Arnason fired a 30-yard drive off the outside of the post.
Aberdeen substitute Mohamed Chalali was unlucky not to score with his first touch, when he was wrongly ruled offside following a Vernon through ball.
Jack's superb quick thinking ensured the Dons had a two-goal cushion by the time Considine was shown a second yellow card after a late challenge on Parkin.
However, a nervous end was ensured when Haber rose to head in a Millar cross.
Live Text Commentary
Full Time The game is over, as the referee blows his whistle.90:00 +2:21
Murray Davidson takes a shot. Rory McArdle gets a block in.90:00 +1:17
The assist for the goal came from Chris Millar.90:00 +1:17 Goal scored
Goal! - Marcus Haber - St J'stone 1 - 2 Aberdeen Marcus Haber scores a headed goal from close range. St Johnstone 1-2 Aberdeen.90:00 +1:10
The ball is delivered by Chris Millar,90:00 +0:42
The assistant referee signals for offside against Mohamed Chalali. Steven Anderson takes the indirect free kick.87:15
Outswinging corner taken by William Gibson.87:09
The ball is swung over by David MacKay, Richard Foster gets a block in.86:34
Outswinging corner taken left-footed by Liam Craig, Mohamed Chalali makes a clearance.86:11
Callum Davidson delivers the ball, Rory McArdle manages to make a clearance.85:22 Substitution
Substitution Carl Finnigan is brought on as a substitute for David McCracken.83:01
Corner taken by Liam Craig, clearance made by Rory McArdle.82:09 Dismissal
Dismissal The referee shows Andrew Considine a red card.80:18 Substitution
Substitution Peter Pawlett replaces Chris Clark.78:37 Goal scored
Goal! - Ryan Jack - St J'stone 0 - 2 Aberdeen A goal is scored by Ryan Jack from 35+ yards to the bottom right corner of the goal. St Johnstone 0-2 Aberdeen.78:16
William Gibson produces a cross, Rory McArdle manages to make a clearance.77:10
David MacKay produces a cross, Murray Davidson concedes a free kick for a foul on Rory McArdle. Free kick taken by Jason Brown.76:13
Corner taken right-footed by William Gibson, clearance made by Richard Foster.75:49
The ball is sent over by William Gibson, clearance by Andrew Considine.74:19
The assistant referee flags for offside against Mohamed Chalali. Direct free kick taken by Peter Enckelman.
Substitution Mohamed Chalali joins the action as a substitute, replacing Rory Fallon.71:25 Substitution
Substitution William Gibson is brought on as a substitute for Alan Maybury.71:25
Foul by Scott Vernon on Steven Anderson, free kick awarded. Callum Davidson restarts play with the free kick.69:20
Free kick awarded for an unfair challenge on David MacKay by Rory Fallon. Peter Enckelman restarts play with the free kick.68:35
Liam Craig takes a shot. Blocked by Rory McArdle.67:41
Kari Arnason takes the chance to get an effort at goal and hits the post.66:05
Unfair challenge on Rory McArdle by Marcus Haber results in a free kick. Jason Brown takes the indirect free kick.64:41
The referee blows for offside. Direct free kick taken by Peter Enckelman.64:12
The offside flag is raised against Liam Craig. Jason Brown takes the direct free kick.63:08
Effort from the edge of the area by Sam Parkin goes wide of the right-hand post.61:21
Corner taken short by Callum Davidson.60:13
Andrew Considine concedes a free kick for a foul on Sam Parkin. Direct strike on goal from the free kick comes in from David MacKay, Rory McArdle gets a block in.58:40
Callum Davidson produces a cross, Sam Parkin takes a shot. Save made by Jason Brown.58:27
Chris Millar delivers the ball, Rory McArdle makes a clearance.58:06
Rory Fallon takes a shot. Save by Peter Enckelman.57:21
Marcus Haber is ruled offside. Free kick taken by Jason Brown.57:06
The referee blows for offside against Rory Fallon. David McCracken takes the indirect free kick.55:39 Substitution
Substitution Rory McArdle on for Youl Mawene.53:20
Effort on goal by Murray Davidson from just outside the penalty area goes harmlessly over the target.52:31
Kari Arnason concedes a free kick for a foul on Chris Millar. Chris Millar takes the indirect free kick, Liam Craig produces a cross, Andrew Considine manages to make a clearance.51:05
Centre by Robert Milsom, Header from deep inside the penalty area by Isaac Osbourne goes harmlessly over the crossbar.50:41
Robert Milsom takes the inswinging corner, Steven Anderson manages to make a clearance.50:08
Marcus Haber produces a cross, save made by Jason Brown.48:37
Inswinging corner taken from the right by-line by Liam Craig, Scott Vernon makes a clearance.48:06
Callum Davidson produces a cross, David MacKay takes a shot. Save by Jason Brown.46:49
Kari Arnason challenges Murray Davidson unfairly and gives away a free kick. Callum Davidson crosses the ball in from the free kick, clearance by Richard Foster.45:31
A cross is delivered by Chris Clark, clearance by David McCracken.45:01
The referee blows his whistle to start the second half.45:00 +2:25 Half time
Half Time The referee blows for half time.45:00 +2:02
Inswinging corner taken left-footed by Callum Davidson, clearance made by Richard Foster.45:00 +1:30
A cross is delivered by Liam Craig, Chris Millar takes a shot. Blocked by Andrew Considine.45:00 +0:37
Liam Craig crosses the ball.44:53 Booking
Booking Booking for Andrew Considine for unsporting behaviour.43:49
Ryan Jack delivers the ball, save by Peter Enckelman.42:35
Marcus Haber is caught offside. Youl Mawene takes the free kick.40:43
Effort on goal by Liam Craig from long range goes harmlessly over the bar.39:17
Chris Millar fouled by Rory Fallon, the ref awards a free kick. The free kick is swung in left-footed by Callum Davidson, Richard Foster manages to make a clearance.36:37
The assistant referee flags for offside against Callum Davidson. Jason Brown restarts play with the free kick.32:08
David MacKay concedes a free kick for a foul on Ryan Jack. Richard Foster crosses the ball from the free kick left-footed from left wing, clearance made by Callum Davidson.31:49
The ball is delivered by Isaac Osbourne.29:31
Strike comes in from Liam Craig from the free kick, clearance by Murray Davidson.29:31 Booking
Booking The referee shows Richard Foster a yellow card for unsporting behaviour.28:47
Richard Foster concedes a free kick for a foul on Marcus Haber.27:10
Shot by Richard Foster went over the bar.26:43
Alan Maybury crosses the ball, Andrew Considine manages to make a clearance.22:47
Chris Millar fouled by Rory Fallon, the ref awards a free kick. Free kick crossed by Liam Craig, clearance by Jason Brown.20:40
Chris Clark takes a shot. Blocked by Callum Davidson.17:45
Foul by Kari Arnason on Murray Davidson, free kick awarded. Liam Craig produces a cross, Steven Anderson takes a shot. Save made by Jason Brown.12:59
Assist by Ryan Jack.12:59 Goal scored
Goal! - Scott Vernon - St J'stone 0 - 1 Aberdeen Scott Vernon fires in a goal from close range to the bottom left corner of the goal. St Johnstone 0-1 Aberdeen.12:35
Corner taken by Chris Clark from the left by-line played to the near post, Marcus Haber manages to make a clearance.12:14
Corner taken by Chris Clark, clearance made by Peter Enckelman.11:34
Corner taken by Chris Clark, Callum Davidson makes a clearance.10:26
Free kick awarded for a foul by Ryan Jack on Sam Parkin. Free kick crossed left-footed by Liam Craig from right wing, Marcus Haber challenges Youl Mawene unfairly and gives away a free kick. Jason Brown takes the free kick.9:11
Unfair challenge on Marcus Haber by Andrew Considine results in a free kick. Liam Craig takes the indirect free kick.7:43
The ball is sent over by Chris Clark.7:07
Free kick awarded for an unfair challenge on Andrew Considine by Marcus Haber. Indirect free kick taken by Youl Mawene.3:51
The ball is sent over by Liam Craig, Richard Foster manages to make a clearance.2:20
Liam Craig decides to take the corner short, Chris Millar crosses the ball, Jason Brown makes a clearance.2:14
The ball is swung over by Callum Davidson, blocked by Isaac Osbourne.0:00
The game gets underway.
Live data and text provided by our data suppliers