Under the draft legislation, which still needs to go through parliament, EU nationals who have never worked in Germany will have to wait five years before they can claim benefits.
The strict new measure comes after a federal court ruled last year that every EU citizen had the right to claim benefits once he or she had resided in Germany for six months.
The ruling sparked fears of “welfare tourism” from countries with a lower standard of living, and angered German municipalities who were already struggling with the financial burden of caring for last year's record influx of migrants and refugees.
“It's clear that anyone who lives here, works here and pays their contributions is also entitled to the benefits of our social system,” said Labour Minister Andrea Nahles after the cabinet adopted the legislation.
But for those “who have never worked here and rely on state financial aid to survive, the principle applies that they should claim livelihood benefits from their home country.”
The government is keen to show it has heard voters' concerns over migration, as growing opposition to Chancellor Angela Merkel's open-door policy has fuelled support for the populist, anti-migrant AfD party.
Worries over migration also played a key role in the British decision to leave the EU, and it remains to be seen whether a post-Brexit Britain will compromise on accepting the free movement of people in order to retain access to the single market.
Germany is the preferred destination for EU citizens, some 4.1 million of whom are currently living in the country, according to official data.
Britain is in second place with some three million EU immigrants calling the country home.
'Betraying European idea'
Under the draft text agreed on Wednesday, unemployed EU nationals will be ineligible for social assistance until they have legally lived in Germany for at least five years.
Those affected by the change in the law will however be entitled to claim a bridging subsistence allowance of one month.
The proposed legislation came in for immediate criticism from politicians from the left-wing Die Linke party and the Greens.
“The government is betraying the European idea,” said leftist MP Sabine Zimmermann.
“The basic right to a subsistence allowance should apply to all people in Germany and should not be restricted.”
A total of 474,000 EU immigrants received social assistance in June, according to Germany's federal employment agency, though not all of them were unemployed.
Citizens from Poland, Bulgaria and Romania accounted for the most claims.