Johnson converted George Saville's cross with virtually his first touch after leaving the substitutes' bench as Neil Warnock's side continued the fine run of form that has seen them remain unbeaten since the opening weekend of the season.
Nottingham Forest failed to record a single effort on target as they slumped to their first defeat in five matches, with Middlesbrough's superiority apparent throughout.
With Dael Fry unavailable, Warnock was forced into a tactical reshuffle that saw him start with a back four rather than the five-man backline he has been fielding for the vast majority of the season.
Teenager Nathan Wood came in for his first Championship start, and the youngster impressed as Boro set about containing a Forest side that have improved markedly since the appointment of Chris Hughton as manager.
The visitors failed to record a single effort on target in a first half that was dominated by Middlesbrough, but while the Teessiders created a number of good chances before the interval, they were unable to take any of them.
Hayden Coulson went close midway through the opening period, but while he drifted dangerously across the 18-yard box, his low strike was straight at the legs of Forest goalkeeper Brice Samba.
Samba's poor clearance had created Coulson's opportunity, and Forest's players came close to shooting themselves in the foot again shortly after the half-hour mark.
Ryan Yates' dreadful back-pass afforded Britt Assombalonga a clear run on goal, but the former Forest striker saw his low shot saved by Samba. Marcus Tavernier picked up the rebound, but while the midfielder had a gaping goal to aim at, he blazed wastefully over the crossbar.
Tavernier saw another shot blocked inside the penalty area shortly before the break, and wasted a good position in the early stages of the second half as he drilled a free-kick from the edge of the area into the wall.
Forest struggled to create clear-cut chances all afternoon, although Miguel Guerrero got himself into a decent position shortly before the hour mark, only to be thwarted by an excellent sliding challenge from Wood.
The visitors' best opportunity came midway through the second period, and saw Yates glance a near-post header just wide of the target as he met a corner from Anthony Knockaert.
At that stage, it looked as though the game was set to finish goalless, but Boro had other ideas and claimed a winner with nine minutes left.
Johnson had only been on the field for three minutes when he met Saville's cross, but the substitute displayed superb composure as he slotted home a slick first-time finish.