Klaasen, batting at number five, finished on 119 not out off just 61 balls as the home side chased down a target of 261 with more than 20 overs to remaining at the JB Marks Oval in Potchefstroom.
The Proteas were in trouble at 79-3 when Klaasen strode to the crease and soon lost partner Tony de Zorzi (21) to leave the home side 87-4.
Klaasen then combined with the experienced David Miller for a stand of 55 but the latter departed for 17, caught and bowled by spinner Akeal Hosein with the total on 142.
The Proteas still had much work to do but Klaasen found the perfect ally in Marco Jansen and the duo powered a 102-run partnership that took just 62 deliveries to effectively take the game away from the Caribbean side.
Klaasen went to his hundred off just 54 balls, the fourth fastest by a South African batter in ODI cricket, and his innings included 15 fours and five maximums.
Even though Jansen fell for 43 with 16 runs still needed, the bulk of the work had already been done and it was left to Klaasen to finish the game off in the 30th over.
Earlier, opener Brandon King scored 72 but the Windies did not capitalise after a good start as they were bowled out for 260 in 48.2 overs.
The only other visiting batters to get any scores of substance were Nicholas Pooran (39) and Jason Holder (36) but they could not kick on to reach the 300-run mark.
Proteas stand-in captain Aiden Markram put the brakes on the middle overs as his 10-over spell of off-spinners went for just 30 runs while picking up the wicket of Holder.
Gerald Coeztee (2-53), Bjorn Fortuin (2-46) and Jansen (2-46) picked up two wickets apiece to restrict the West Indies to a sub-par total.
The teams share the three-match series 1-1 after the first game was abandoned with the teams now gearing up for three T20I matches.