The US House of Representatives has given its final approval to a bill - already passed by the Senate - backing the Keystone XL pipeline, in defiance of the president's wishes.
The White House recently said President Barack Obama would veto the bill.
The bill has not enough votes to override a presidential veto.
The 875-mile (1,400km) pipeline would carry tar sands oil from Alberta, Canada, to the US state of Nebraska, where it joins pipes running to Texas.
The project has pitted Republicans and other supporters, who say it will create much needed jobs, against many Democrats and environmentalists, who warn the pipeline will add to carbon emissions and contribute to global warming.
The US president has been critical of the pipeline, saying at the end of last year that it would primarily benefit Canadian oil firms and not contribute much to already dropping petrol prices.
The House of Representatives approved the bill on Wednesday by 270 votes to 152. One Republican voted against it, while 29 Democrats voted in favour.
The bill had been expected to get a smooth passage through the House of Representatives. Both chambers are controlled by the Republicans, who overwhelmingly support the construction of the pipeline.
The House endorsed amendments approved by the Senate last month.
The amendments acknowledged the existence of climate change, and said oil sands should not be exempt from a tax to clean up oil spills.
The Keystone XL pipeline aims to carry some 830,000 barrels of heavy crude a day from the fields in Alberta to Nebraska.
The oil would then be transported through existing pipes to refineries in Texas. The southern section of the project was finished last year.