MPs backed the Internal Market Bill by 340 votes to 263.
But critics, including a number of Tory MPs, warned it risks damaging the UK by breaching international law.
Two Tory MPs voted against the bill on Monday night – Sir Roger Gale and Andrew Percy – while a further 30 abstained, although some of those may not have been for political reasons.
Although the government has a majority of 80 in the Commons, it is braced for further rebellions in the coming weeks as the legislation receives detailed scrutiny.
Several prominent Conservatives, including former Chancellor Sajid Javid – who appeared to abstain on Monday – have said they could not support the final bill unless it is amended.
But Home Secretary Priti Patel insisted it put the “safeguards and mechanisms in place to ensure that we stay true to the people of Northern Ireland”.
Sir Roger Gale, the Tory MP for North Thanet in Kent, told the BBC’s Newsnight he had voted against the bill as a “matter of principle” to uphold international law.
“I think that this is damaging our international reputation for honest and straight-dealing at a time when we are about to embark on a series of trade negotiations. I took a view that you fight this tooth and nail at every step.”
He suggested other colleagues were “holding their fire” until later in the bill’s passage, with a group led by ex-minister Sir Bob Neill pressing for a “parliamentary lock” on the government’s ability to exercise the powers.
“I’m not remotely surprised that I am a tiny minority. I think that may change next Tuesday,” he added.
Writing in the Daily Telegraph, former Conservative leader Lord Hague also warned against breaching international law, saying it would be “a serious foreign policy error”.
“It would have a lasting and damaging effect on our international reputation and standing, diminishing our ability to exert our influence and protect our interests.”
Ms Patel told BBC Radio 4’s Today programme the government was still working closely with the EU to “settle on our future relationship”.
But she defended the bill, saying it stood by the party’s manifesto commitments from the 2019 election to “ensure peace, security and good governance for the whole of the United Kingdom”.
Ministers say this is a failsafe mechanism in case the EU interprets the agreement, in particular the Northern Ireland Protocol designed to avoid a hard border on the island of Ireland, in an “extreme and unreasonable” way.
Boris Johnson’s government has a hefty majority. It was never going to lose Monday night’s vote in the Commons.
Downing Street calculates that most of the public won’t pay that much attention to yet more Westminster argy-bargy about the Brexit process.
And where it does, they would much more likely take the side of the government taking a tough line with the EU than share the concerns of former prime ministers or august lawyers foaming about the government’s behaviour.
And yet – first off, to state the obvious, opposition from former occupants of No 10, former chancellors and former cabinet ministers is not exactly a sign of peace and harmony.
But the resistance to No 10 goes beyond the usual suspects this time.
But ministers also said they would listen to concerns, insisting that the powers being sought would only be used if other legal avenues had been exhausted and only if MPs explicitly voted to activate them.
A government spokesman said it was vital the bill – which is expected to face stern opposition in the House of Lords – becomes law by the end of the year when EU law will cease to have effect in the UK.
“It will protect the territorial integrity of the UK and the peace in Northern Ireland, safeguarding trade and jobs across all four corners of the UK following the end of the transition period,” he said.
The PM also held a call with Conservative members of the House of Lords on Monday night.
Labour said the PM was reneging on a deal he himself signed earlier this year, and on which Conservative MPs campaigned in the 2019 election, and was “trashing” the UK’s reputation.
But the Commons also voted against a Labour amendment to reject the bill entirely by 349 votes to 213.
MPs will now begin detailed scrutiny of the bill on Tuesday with Conservative MPs seeking further assurances that the UK will not betray its treaty obligations.