Both teams made a lackadaisical start, with the final ball often disappointing, but the game sprung into action in the 30th minute.
City appealed for handball as Michael Dawson appeared to stop Michael Johnson's close-range shot with his hand. Elano then reacted the quickest to the rebound, but the alert Dawson blocked the Brazilian's 25-yard effort.
Tottenham's response was immediate when Pascal Chimbonda and Keane combined for the Republic of Ireland striker's first goal in seven games.
Vedran Corluka allowed Chimbonda to get the better of him down the flank and the former Wigan full-back set the deadly Keane free to score from an acute angle.
Keane scored his 21st goal of the season
Eriksson's men could, and perhaps should, have levelled before the break with Elano forcing a reflex save from Robinson and January signing Nery Castillo profligate on two occasions.
Castillo had another opportunity to equalise in the 52nd minute but the Mexico striker's hesitancy, when just a few yards from goal, allowed Robinson to clear the danger.
City's deserved goal came on the hour when Castillo mis-kicked Benjani's cross and Elano headed goalwards for Ireland to tap-in from five yards.
In response to the home side's domination, Juande Ramos replaced Keane with Darren Bent, much to the captain's annoyance, and Jamie O'Hara with Steed Malbranque.
But it was City who took the lead thanks to Onuoha's first goal for the club.
Spurs' substitutes combined with Bent poking O'Hara's free-kick beyond Joe Hart for what looked like a legitimate goal, but it was disallowed for offside and City celebrated a rare home win.
• Manchester City manager Sven-Goran Eriksson: "We have a good team. We had some weeks where we were a little bit flat but I hope this is a turning point.
"We didn't play too badly in the first half, we should have been less respectful of Tottenham.
"We deserved the win. We were thinking of taking Stephen Ireland off but, luckily, we didn't."
• Tottenham first-team coach Gus Poyet on Robbie Keane: "We'll look into it [Keane's petulant reaction to being substituted] but it just shows he wants to stay on the pitch. That's the type of character we want at the club.
"We need to make sure we kill off games. We were complacent.
"This is a game we have to use if we are to do better next season."
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.