Tom Bradshaw got the Reds on their way with a well placed volley 12 minutes in and Conor Hourihane doubled the lead just before the break with a rasping 25-yard effort.
Other Reds chances fell the way of Ryan Kent and Sam Winnall, but both were unable to find a way past John Ruddy
Nelson Oliveira pulled a goal back seven minutes into the second half with a venomous effort from just outside the area with Graham Dorrans firing over as the Canaries looked for a leveller.
Despite a string of late opportunities, Paul Heckingbottom's Reds hung on for their first win at Oakwell in eight matches, moving to within three points of the play-offs in the process.
Barnsley got the game underway and fashioned the first opening with little more than a minute on the clock as Ryan Kent worked his way inside and forced John Ruddy into a low save.
Norwich responded shortly after from a set piece after Josh Murphy was upended on the edge of the area, with Alex Pritchard bending the resulting free kick just wide of the post.
The Reds made the breakthrough 12 minutes in as Josh Scowen drilled in a cross which Tom Bradshaw dispatched on the volley past John Ruddy.
Adam Davies made his first save of the game on 18 minutes, getting down well to deny Robbie Brady’s free kick finding its way into the corner.
A deflected Nelson Oliveira effort failed to test Davies midway through the half before Bradshaw came close to doubling the lead as Scowen hooked a ball into his path, but Ruddy palmed the effort over the crossbar.
The Reds saw appeals for a penalty waved away by the referee after Sebastien Bassong appeared to foul Scowen, while Sam Winnall fired a loose ball over after Ruddy had spilled a Kent cross.
Bassong saw a tame header saved by Davies as the half neared its conclusion but the Reds brought more cheers from the home fans five minutes before the break.
James Bree accelerated clear down the right and despite his cross being cleared, Conor Hourihane unleashed a rasping drive straight into the top corner beyond the reach of Ruddy.
HALF TIME: Barnsley 2-0 Norwich City
A double change at the break from the Canaries gave them more life at the start of the second half and Jacob Murphy almost immediately pulled a goal back, only for Angus MacDonald to deny him.
Seven minutes into the second half and the visitors did pull a goal back when Nelson Oliveira fired home from the edge of the area, with Hourihane firing just wide in reply.
Bradshaw found the side netting with a low effort from an angle after Hourihane’s quick thinking from a free kick picked him out.
The Reds thought they had secured a third goal three minutes later as Kent left a trail of Canaries players in his wake. He chipped the ball to Josh Scowen, who nodded back into the path of Sam Morsy to slot home.
His celebrations were cut short however as the flag was raised for offside against Scowen.
Oliveira fired wide and Graham Dorrans over shortly afterwards, before the aforementioned forward sent a free kick around Adam Davies’ wall, with the Welsh stopper pushing his shot away to safety.
Jacob Murphy missed another chance as Andy Yiadom made him scuff his effort from Martin Olsson’s cross wide of the mark.
Goalscorer Bradshaw and Sam Winnall were replaced by Stefan Payne and Adam Hammill for the Reds 20 minutes from time with Payne flicking just wide of the mark within five minutes of coming on.
A breakdown in communication between Marc Roberts and Yiadom almost gifted Norwich a route to goal, but Roberts made a stunning challenge to prevent Oliveira racing through one-on-one with Adam Davies.
That was followed by a late flurry of corners amounted to nothing as the Reds held on for their first at home since August.
FULL TIME: Barnsley 2-1 Norwich City
Reds: Davies (GK), Bree, Roberts, MacDonald, Yiadom, Scowen, Morsy, Hourihane, Kent (Janko 90+4’ ), Bradshaw (Payne, 70’ ), Winnall (Hammill, 70’ ).
Subs: Townsend (GK), Kpekawa, Evans Williams.
Norwich City: Ruddy (GK), Pinto, Bennett, Bassong, Brady (Lafferty, 85’ ), Jacob Murphy, Howson (c), Dorrans, Pritchard (Mulumbu, 46’ ) Josh Murphy (Olsson, 46’ ), Oliveira.
Subs: Jones (GK), Martin, Hoolahan, Klose.
Attendance: 12,306 (1,287 away)