The 24-year-old held off the challenge of long-distance legend Kenenisa Bekele, the man who holds the 5,000 metres and 10,000 metres world records as well as eight Olympic and world titles.
He finished with a time of two hours five minutes and 48 seconds.
It was the biggest victory of his career, having previously won the 2016 Amsterdam Marathon.
Earlier in the day, his Kenyan compatriot Mary Keitany won the Elite Women’s race and set a new world record time in the process.
The 35-year-old broke Paul Radcliffe’s 12-year women’s only marathon record with a time of two hours 17 minutes and one second.
Elsewhere, David Weir won his seventh London Marathon in the men’s elite wheelchair race, while Manuela Schär won the women’s equivalent.