The Vikings tied the game with 1:11 left on a Ryan Longwell field goal, but the Lions won the overtime coin toss and quickly marched down the field for the victory.
Detroit logged a third straight win to start the season 3-0 for the first time since 1980 and took a victory in Minnesota for the first time since 1997. They overcame a 10-point, second-half deficit thanks to a pair of Johnson TD catches and three Hanson field goals.
Minnesota (0-3) surrendered a second-half lead for the third time in three weeks and have been outscored 67-6 after halftime this season.
Matthew Stafford went 32-of-45 for 378 yards, two TDs and no interceptions for the Lions.
Minnesota's Donovan McNabb, meanwhile, completed 22-of-36 passes for 211 yards and scoring strike to Visanthe Shiancoe.