Donegal scraped a two point win to keep their Division One survival hopes alive in Fr. Tierney Park, Ballyshannon.
However, there will be a post mortem over the concession of three goals and they were lucky on another two occasions as Kildare found huge gaps.
Kildare had the aid of the strong breeze and got off to a whirlwind start with a goal on two minutes. Tommy Moolick broke clear to set up Daniel Flynn for an easy finish.
Ryan McHugh set up Odhran MacNiallais for a Donegal point but they were lucky not to concede a second goal as Flynn was adjudged to be in the square when palming home. Kevin Feely pointed a free while Hugh McFadden had a good Donegal point at the other end.
Kildare were bizarrely reduced to 14 on 14 minutes when captain Eoin Doyle, who was booked for a late tackle on Ryan McHugh, was then shown a second yellow for not having a gum-shield.
While Johnny Byrne added a point for the Lilywhites, they were lucky not to be reduced to 13 when Cian O'Donoghue was high and into the back of Ryan McHugh.
In the final ten minutes of the half, Patrick McBrearty came to life to fist two good points and leave just a point in it at the break.
The second half was a more exciting affair.
The sides traded early points before Donegal hit four on the trot to go three clear. But a second goal by Niall Kelly had Kildare level and Fergal Conway added a point to put them in front.
Donegal again hit back with Ryan McHugh to the fore with two great points as they again went three clear. But once more a third goal from David Slattery had the sides level with ten minutes left.
A point from Hugh McFadden and a goal from Ryan McHugh, which went all the way to the net from near the sideline was the last turning point.
Kildare did get two late points but it was not enough to deprive Donegal of the win.
Donegal: Shaun Patton; Eoghan Bán Gallagher (0-1), Caolan Ward, Stephen McMenamin; Paul Brennan, Eamonn Doherty, Tony McClenaghan; Hugh McFadden (0-2), Odhran Mac Niallais (0-1); Ryan McHugh (1-2), Leo McLoone, Mark McHugh; Patrick McBrearty (0-4,1f), Michael Murphy (0-3,1f), Jamie Brennan (0-1).
Subs., Niall O'Donnell (0-1) for McClenaghan ht; Neil McGee for Ward 51; Stephen McBrearty for Brennan 55; Caolan McGonagle for M McHugh 60; Ciaran Thompson for Mac Niallais 64; Nathan Mullins for O'Donnell 70
Kildare: Mark Donnellan; Peter Kelly, David Hyland, Mick O'Grady; Cian O'Donoghue, Eoin Doyle, Johnny Byrne (0-1); Kevin Feely (0-3), Tommy Moolick; Fergal Conway, Niall Kelly (1-0), Paul Cribbin; Ben McCormack, Daniel Flynn (1-1), Keith Cribbin.
Subs., Paddy Brophy for McCormack (25); Kevin Flynn (0-1) for O'Donoghue (ht); David Slattery (1-0) for P Cribbin 55; Chris Healy for Kelly (60); Fionn Dowling for Conway 64; Mark Sherry for Moolick (69)