Haskins completed 6 of 7 passes for 94 yards and rushed for 24 yards on three carries. He made several big plays to set up the go-ahead score, a 1-yard run by J.K. Dobbins late in the third quarter.
A 25-yard touchdown run by Mike Weber late in the fourth quarter, following an interception by Jordan Fuller, sealed the victory.
The Buckeyes finished the regular season 10-2 and will play Wisconsin next Saturday in the Big Ten championship.
It was a tale of two quarters in the first half Saturday at Michigan Stadium, and at halftime, the Ohio State Buckeyes and Michigan Wolverines were tied 14-14.
Michigan jumped out to a 14-0 lead, scoring its second touchdown in the opening seconds of the second quarter.
The Buckeyes dominated the rest of the quarter, getting on the board with a touchdown run by J.T. Barrett and tying the game on a touchdown pass from Barrett to Marcus Baught.
Key player: Barrett rushed for 64 yards and threw for 30 yards.
Key play: Barrett rushed 21 yards on 3rd-and-9 to cut Michigan's deficit to 14-7.
> THE RIVALRY: Five things to love | Meyer on this week's game | By the numbers | Meyer vs. UM | Storylines
Slow start: The Buckeyes started the game with three 3-and-outs and had minus 6 yards at that point.
Special teams star: Donovan Peoples-Jones returned a punt 42 yards, setting Michigan up with a first down inside the 10. John O'Korn threw a 3-yard touchdown pass to Sean McKeon two plays later to give Michigan a 14-0 lead.