challenging 311 for seven before bowling out the hosts for 171 in 34 overs to grab a bonus point via the Duckworth/Lewis method in a rain-truncated match.
The target was revised to 274 in 39 overs after a two-hour rain delay before which the hosts were 56 for two in 10 overs.
India's victory has thrown the series wide open with all three teams in with a chance of making the finals.
West Indies are in with a stronger chance having won two of their three matches for nine points. They will wind up their league engagements tomorrow against Sri Lanka.
India will face Sri Lanka on Tuesday in the last league match. Both the teams have five points each as of now.
After a couple of ordinary shows, the famed Indian batting line-up got its act together with Kohli leading the way.
Batting with a lot of grit and gumption, Kohli (102) anchored India after the team lost five established batsmen at a score of 210 in 40 overs.
Openers Shikhar Dhawan (69) and Rohit Sharma (46) had laid a strong foundation with their 123-run stand and Kohli ensured that their hard work did not go waste with his gritty 14th One-Day century.
Pacer Bhuvneshwar Kumar then rattled the West Indies chase with wickets of Chris Gayle and Darren Bravo before heavens opened up and held up play for two hours.
After resumption, West Indies batsmen succumbed to pressure and the team lost wickets in a heap.
Stage was set for Indian pacers as Bhuvneshwar (3/29) and Ishant Sharma knocked off half of the West Indies' batting line up in no time.
Sharma had Marlon Samuels (6) caught before removing set opener Johnson Charles (45), while Bhuvneshwar added the wicket of swashbuckler Kieron Pollard, who could not even open his account.
Umesh Yadav (3/32) joined the party by scalping Denesh Ramdin (9) and rival skipper Dwayne Bravo (14) to leave West Indies reeling at 108 for six.
Earlier, Kohli got out off the last ball of the innings after nullifying the success of West Indies fast bowlers, who had put the hosts in a good position with regular strikes.
Kohli faced 83 balls in his innings and punished the Caribbean bowlers with 13 fours and two sixes.
At the end of 40 overs, India had 210 runs on the board and only Kohli to bat with tail-enders after the pace duo of Kemar Roach and Tino Best polished off the Indian middle-order.
Kohli responded to the challenge in the best possible manner as India scored 101 runs in the last 10 overs with his contribution being 67 runs. R Ashwin supported Kohli well with his 18-ball 25 as they shared a 90-run stand for the seventh wicket in 8.2 overs.
Earlier after being sent in to bat, Dhawan and Sharma provided a solid start to India with 123-run stand, which was broken when the left-hander chose to play aggressively after spending a watchful 23 overs at the crease.
Coming into the make-or-break match, both the Indian openers batted with a lot of responsibility. They chose caution over aggression, relying on rotation of the strike and hitting an odd boundary in between.
Dhawan, by nature is a stroke-maker, kept his natural urge to go for strokes under control till India had safely negotiated almost 25 overs.
The left-hander opened up after India had crossed 100-run mark. He chose local lad and highly-rated spinner Sunil Narine for some punishment, hitting him for two sixes and a four.
However, Dhawan could not continue in the same vein, holing out to Darren Barvo at deep square leg when he attempted to hit one off Kemar Roach over the ropes.
His knock came off 77 balls and was studded with eight fours and two sixes. Sharma too joined him in the pavillion when he edged one behind off Tino Best. In space of seven overs India lost Suresh Raina (10), Dinesh Karthik (6) and Murali Vijay (27).
Ravindra Jadeja's run out made things worse for India but Kohli pulled India out of trouble.