Having earlier hit the crossbar and then been denied by an in-form Brad Guzan in the home goal, the front man latched onto Dele Alli's quickly-taken free-kick to fire us ahead on the stroke of half-time at Villa Park.
Erik Lamela had also hit the woodwork in a first period which we completely controlled.
Villa made a purposeful start to the second half but we soon stamped that out as Alli set up Kane to double his tally and draw himself level with Leicester City's Jamie Vardy as the division's top marksman with 19 league goals so far this term.
We saw out the game comfortably and, although Remi Garde's men did hit the woodwork a couple of times towards the end, we closed the gap on leaders Leicester to two points, albeit having played one game more than the Foxes.
There were seven changes from the team defeated away to Borussia Dortmund in the Europa League on Thursday night with just Hugo Lloris, Toby Alderweireld, Kevin Wimmer and Christian Eriksen retaining their starting places. The team was, however, unchanged from our last league outing against Arsenal.
The home side were desperate for a win after four straight defeats, while we were keen to return to winning ways after going three games without a victory in all competitions.
We almost got off to a flying start inside the opening five minutes when Lamela put Kane through on goal and the striker beat Guzan to the ball, but his chip over the onrushing stopper carried a bit too much power and it bounced off the bar and behind for a goal-kick.
Kyle Walker was enjoying the freedom of the right flank and sent in a couple of dangerous crosses early on before Alli stung the palms of Guzan with a low drive from distance.
Villa grew into the game but Eriksen was next to go close when he fizzed a shot narrowly past the post from 25 yards.
Five minutes later Kane saw a snapshot from a Danny Rose cross well saved by Guzan as we looked dangerous on the counter. Wimmer sent Kane away in the channel soon afterwards but again Guzan stood up to beat his effort away.
We were getting closer but Guzan was on fine form, pushing a low Lamela shot onto the base of the post on the half-hour mark after more good work from Walker.
The right-back, enjoying a terrific game, then forced the keeper into another save two minutes later with a low drive from the corner of the box.
We had a let-off late in the half when Rudy Gestede volleyed straight at Lloris from six yards out after a good delivery from Jordan Veretout.
It looked like Villa would hold out until the interval but Guzan was finally beaten on the stroke of half time. Alli showed great speed of thought to take a free-kick quickly after being brought down, which Kane collected in his stride and he drove into the box in the left channel before firing past the keeper from a tight angle.
There were a couple of nervy moments in the opening 30 seconds after the interval as Villa pushed forward, but we killed the game off with another goal at the other end on 48 minutes. Alli kept his cool on the left to pick out Kane, who ran onto the ball in the area and rifled it into the top corner.
We continued to look dangerous on the break and Walker almost grabbed another on the hour mark with a rasping drive that Guzan parried away to safety.
The second goal had taken the sting out of the game and the tempo dropped as a result. There was no room for complacency, though, and Gestede fired a warning shot with 20 minutes to go when he chested the ball down and rifled wide on the angle.
Lamela had an effort deflected wide with 15 minutes to go and Alli looked intent on adding to his two assists for the afternoon with Villa there for the taking.
Having knocked the ball around with ease for most of the second half, we nearly allowed the hosts back into the game on 84 minutes as Jordan Ayew got away from Mousa Dembele down the left side and hit the post from close to the byline with the ball ricocheting off Lloris' feet into the path of Gestede, but his thunderous shot hit the underside of the bar.
Four minutes later Villa went close again when young Andre Green, on as a substitute for his Premier League debut, whipped in a corner which Gestede flicked on, with Joleon Lescott hitting the woodwork at the back post.
That was it as far as chances went, though, and we made a deserved return to winning ways.
Aston Villa (4-3-3): Guzan; Hutton, Okore, Lescott (c), Cissokho; Westwood, Gana, Ayew; Gil (Sinclair 69), Veretout (Green 62), Gestede. Substitutes (not used): Bunn, Richards, Clark, Bacuna, Lyden.
Spurs (4-2-3-1): Lloris (c); Walker, Alderweireld, Wimmer, Rose; Dier, Dembele; Lamela (Chadli 89), Alli (Mason 86), Eriksen (Carroll 78); Kane. Substitutes (not used): Vorm, Davies, Trippier, Son.
Goals: Spurs – Kane 45, 48.
Referee: Anthony Taylor.