The hotly-disputed bill, which passed by 98 votes to 67, allows the government to declare a "state of emergency" if migrant numbers suddenly rise and reject most asylum seekers directly at the border, including those from war-torn countries like Syria.
Opposition parties and rights groups have slammed the legislation, with the UN's refugee agency warning that it "removes a centrepiece of refugee protection".
But Interior Minister Wolfgang Sobotka insisted Austria had no other choice as long as "so many other European Union members fail to do their part" to stop the influx.
Wedged between Europe's two main refugee routes - the Balkans and Italy -- Austria received around 90,000 asylum requests in 2015, the second-highest in the bloc on a per capita basis.
More than a million people, primarily from Syria, Iraq and Afghanistan, landed in Europe last year, triggering the continent's worst migration crisis since the aftermath of World War II.
Many braved a short but dangerous sea journey from Turkey to Greece, before trekking up through the Balkans toward western and northern Europe.
To reduce the flow, the EU recently struck a controversial deal with Ankara, under which all irregular migrants reaching Greece after March 20 will be returned to Turkey.
The crisis has boosted populist fringe parties across Europe, pressuring traditionally centrist governments to adopt a much firmer stance on migrants.
Under Austria's new law, the government can now declare an emergency if the migrant flow threatens "national security".
Border authorities will then only grant access to refugees facing safety threats in a neighbouring transit country or whose relatives are already in Austria. Some groups including minors and pregnant women will be exempt from the rule.
