A Ronan Kelly goal for Kildare on 38 minutes looked to have pushed the Lilywhites into an unassailable lead as they had a five-point advantage approaching the last three minutes.
Kildare led 0-6 to 0-5 at the break, but six first-half wides were to prove crucial. Four half-backs, two from each side, were on the scoreboard early as defences were on top. Donach Magee and Harry Donnelly swapped frees, but Luke Murray’s late point gave Kildare the half-time advantage.
Three early Dublin points on the change of ends, from a Rian Doherty free and two from Senan Bolger, swung the advantage in the visitors’ favour.
One Doherty free in a 20-minute spell meant Dublin played second fiddle to the home side throughout the third quarter. Kelly’s goal and points from Kildare subs Austin Donegan and Dylan O’Dwyer (three) looked to have booked Kildare’s place in the final.
Dublin weren’t finished and the two late goals from Senan Bolger and Shane Devane left the home crowd shell-shocked. A late O’Dwyer free drifted wide of the post and extra time was avoided.
Dublin will meet Longford in the final.
Scorers – Dublin: S Bolger 1-2; S Devane 1-0; D Magee (f), R Doherty (2fs) 0-2 each; C Gavin, J Kennedy, R Ennis, H O’Neill 0-1 each. Kildare: D O’Dwyer (2fs), P Ryan 0-3 each; R Kelly 1-0; C McKevitt 0-2; L Kenny, L Murray, H Donnelly, A Donegan 0-1 each.
Dublin: F McDonnell; E O’Donovan (F Costello 41), D O Sullivan, J O’Keeffe; J Kennedy, F McGinnis, R Ennis; C Gavin (C McCabe 56), K Costello; D McGill, D Magee, S Bolger; C Loughran (S Devane 56), F Lydon (H O’Neill 38), R Doherty.
Kildare: C McDonnell; R Beggan (S Gallagher 50), L McDonald, C Cahill; P Ryan, F Dowling, L Kenny; E Boyle( D O Dwyer 46), R Lawlor; C McKevitt, R Kelly (O Dellier 63), B Caffrey; L Murray, H Donnelly (A Donegan 37), T Donlan (M O Toole 59).
Referee: James Foley Carlow