In an otherwise unremarkable first half, the hosts had the only clear opening in the 24th minute.
However, while the opening 45 minutes was a mundane affair, the encounter burst into life after the restart.
There were 53 minutes on the clock when Leigh Griffiths became just eighth player in Celtic's history to score 40 goals in a single campaign for the club.
The striker weaved his way into the home side's penalty area, before getting the better of Zander Clark with his shot.
Yet, within three minutes, St Johnstone were level as Stefan Johansen lost possession and his error was punished by Steven MacLean, who lifted the ball over a helpless Logan Bailly in the Celtic goal.
Then, Bailly was beaten again 13 minutes from time by what turned out to be the winning goal. The Celtic keeper collided with his own defender Efe Ambrose, leaving Graham Cummins with a routine finish.