我有一个ASP.NET网站,该网站为特定域组(MYDOMAIN\MY_SITE_USERS)设置了Windows身份验证。我希望添加一个控制器,其中一些操作可以从特殊Windows帐户执行,而无需访问网站的其余部分。
因此:
~ ==> only MYDOMAIN\MY_SITE_USERS
~/DoSomething ==> only MYDOMAIN\MY_SITE_USERS
~/SpecialAction/Do ==> only MYDOMAIN\SPECIAL_ACCOUNT
我看到过其他答案(在Web.config中使用location
),例如:
<location path="~/SpecialAction/Do">
<system.webServer>
<security>
<authorization>
<add accessType="Deny" users="*"/>
<add accessType="Allow" users="MYDOMAIN\SPECIAL_ACCOUNT"/>
</authorization>
</security>
</system.webServer>
</location>
但我的问题是,有了上面的,那么SPECIAL_ACCOUNT就可以访问所有其他的页面,因为我需要添加到一般:
<authentication mode="Windows" />
<identity impersonate="true"/>
<authorization>
<allow users="MYDOMAIN\SPECIAL_ACCOUNT" />
<allow users="MYDOMAIN\MY_SITE_USERS"/>
<deny users="?" />
<deny users="*" />
</authorization>
否则MYDOMAIN\SPECIAL_ACCOUNT根本无法登录。
2条答案
按热度按时间hjzp0vay1#
您是否尝试过使用类似以下的方法?
如果您正在寻找一个基于web.config的解决方案,那么值得看看Dynamic Controller/Action Authorization in ASP.NET MVC。
az31mfrm2#
在需要保护的控制器上使用操作过滤器。
然后这样使用:
你甚至可以扩展上面的方法来接受参数,如果你可以把所有的逻辑都放到一个过滤器中,那么你只需要记住把它添加到所有的控制器中,并带有保护它所需的参数。