The striker's 14th and 15th of the season snatched a result that could and should have been beyond the visitors, had Millwall made the most of the several gilt edged chances that came their way.
Referee Andy Hall also had an influence and his over-officious approach resulted in eight yellow cards in a game that was by no means dirty, but crucially, as far as Millwall were concerned, failed to spot two blatant hand balls.
In only the sixth minute Michael Dawson blocked a Neil Harris shot with his arm but went unpunished, while Johnson clearly used his arm to control the ball as he bundled in Forest's equaliser in the 64th minute.
And when Hall deemed Matt Lawrence's tangle with Johnson worthy of a second caution Millwall were reduced to ten men with ten minutes remaining and handed the initiative to the visitors.
Having ridden their luck, Forest made the most of their numerical advantage five mintues from time as Marlon Harewood turned away from Robbie Ryan and delivered a cross that Johnson could not fail to finish.
Kevin Davies' third goal in five starts on an extended loan period from Southampton had given the Lions the advantage a minute before the break. Lawrence's long throw was helped on by Stuart Nethercott and Davies rose above the defence to guide a header over keeper Darren Ward.
And with the bit between their teeth Millwall laid siege to the Forest goal straight after the break, but were let down by their finishing.
Neil Harris directed a header straight at Ward and then failed to turn in Christophe's Kinet's cross at the far post, while Davies underhit chip fell kindly for the keeper.
But having weathered that storm Forest pressed on to win the game with Johnson's brace.