Citizens from most European Union countries living in the UK will be barred from voting in the in/out referendum - but the SNP has called for changes to make a "Brexit" more difficult.
The franchise for referendum, promised by the end of 2017, will be based on that for a general election - meaning Irish, Maltese and Cypriots resident in the UK will get a vote, but other EU citizens will not.
Tory Eurosceptic Liam Fox said: "This is a fitting response by the government. Allowing EU citizens to vote in our referendum would have been an unacceptable dilution of the voice of the British people."
The decision means the EU referendum will not be held by the rules of a local election, in which EU and Commonwealth citizens can vote.
But the government will face attempts to alter the legislation, with the SNP set to argue that 16 and 17-year-olds should be allowed the vote, as they were in the independence referendum in Scotland.
The party's Westminster leader Angus Robertson said: "I don't agree with having a referendum on EU membership - but if it is to go ahead, then Cameron has a responsibility to help ensure it can be an enriching and open debate. Young people are our future. It is their UK - and their Europe - so they must have their say."
Writing in the Guardian, he also called for a rule that would mean the UK cannot leave the EU unless all voters in all four nations have backed leaving the EU.
"We will propose a 'double majority' rule, meaning that unless England, Scotland, Wales and Northern Ireland each vote to leave the EU, as well as the UK as a whole, Britain would remain a member state."
The Tories are not united on the issue of how the vote should be held.
“It would be fair to say that there is now a range of views in the party on this issue,” one Conservative backbencher told The Independent, adding there were "some MPs who are pro and some who are against” letting 16 and 17-year-olds vote.
Details about the vote were revealed as European Commission President Jean-Claude Juncker was due to hold talks with David Cameron at Chequers.
Legislation for the referendum will be introduced to Parliament on Thursday, the day after the Queen's Speech.
The Bill will make clear that the franchise will be based on that for a general election, plus members of the House of Lords and Commonwealth citizens in Gibraltar.
British, Irish and Commonwealth citizens over 18 who are resident in the UK will be eligible to vote, as well as UK nationals resident overseas for less than 15 years.
Eurosceptics had claimed that as many as 1.5 million people from other EU countries could have been allowed to vote in the plebiscite if it had taken place under the rules for local government elections, which citizens of other member states can participate in.
Official figures show the total number of UK parliamentary electors in 2014 was 45.3 million while the number of local government electors was 46.8 million.
A Number 10 source said: "No Brit under the age of 58 has had their say on the UK's membership of the European Union.
"It is time to put this right and to give people the choice - in or out. This is a big decision for our country, one that is about the future of the United Kingdom. That's why we think it's important that it is British, Irish and Commonwealth citizens that are the ones who get to decide."
The meeting with Juncker - whose appointment Cameron publicly opposed - comes at the start of a week which will see a whirlwind tour of European capitals where the Prime Minister will try to build support for his reform agenda.
A source said: "It is an opportunity for the PM to underline why he is doing this and the views of Britain about the EU, the case for renegotiation and not sticking with the status quo."
The talks are expected to touch on the broad areas where the Prime Minister thinks change is needed and "there will be some discussions about how we taken them forward", the source said, although the meeting is not expected to go into great depth about the reforms.
Later this week, Cameron will fly to Denmark for a working breakfast on Thursday morning with his counterpart Helle Thorning-Schmidt.
He will then travel to the Netherlands to meet Dutch prime minister Mark Rutte before ending the day with talks over dinner at the Elysee Palace with French president Francois Hollande.
On Friday, Cameron will travel to Warsaw for discussions with prime minister Ewa Kopacz in Warsaw before concluding the trip in Berlin where he will hold talks with chancellor Angela Merkel.
He hopes to talk to all other 27 leaders of EU member states individually before the European Council summit at the end of next month.