The Irons, who last won against Chelsea here on December 1, went ahead through a Mark Noble penalty after just three minutes when referee Mark Clattenburg spotted a shirt pull by defender Ryan Bennett.
Norwich midfielder Robert Snodgrass rattled the woodwork with a free-kick before Joey O'Brien crashed home a second goal after 26 minutes, which proved enough for a morale-boosting victory ahead of next weekend's FA Cup tie against Manchester United.
Russell Martin netted a late consolation with a well-taken volley for his third goal in two games.
The Irons - with just two victories in the last 11 outings - got off to a flying start when Bennett, drafted into the starting XI in place of Javier Garrido, was adjudged to have held Winston Reid as he climbed for a header.
Noble - standing in as captain for suspended Kevin Nolan - made no mistake from the spot, blasting the ball down the middle as Mark Bunn dived the wrong way.
Carlton Cole shrugged off an injury and after 14 minutes he spun Sebastien Bassong before drilling in a 20-yard strike which Bunn did well to pluck out of the air.
It was 2-0 after 25 minutes. Play continued with Norwich midfielder Alex Tettey on the floor after being clattered by Cole and Noble charged into the right side of the Norwich penalty area.
His cut-back from the goalline was pushed out by Bassong and O'Brien rifled the loose ball past Bunn.
Martin set up an anxious three minutes of stoppage time for the home fans with a close-range volley from Simeon Jackson's cross.