我有一个ASP.NET MVC 4应用程序,我在IIS网站的站点级别下运行。
所以dir结构如下所示:
\IIS
\Site
\bin
\Content
\Views
MVC 4应用程序通过用户名和密码使用表单身份验证,但我需要锁定整个站点并关闭IIS级别的匿名身份验证。
此要求的目标是仅允许用户登陆主页和登录页面。问题是如果我关闭匿名身份验证,那么用户甚至无法回家或登录。
我们希望阻止用户在浏览器中转到/Content/Scripts/MyScript.js
。
我正在使用捆绑,所以那些文件在那里,除了捆绑之外我不会被我使用。
这是否可能,因为IIS和MVC 4 auth处于完全不同的水平?如果有可能我有哪些选择?
答案 0 :(得分:1)
Chris Pratts的回答是正确的。您可以成功启用匿名身份验证,让MVC4为您处理所有这些。
请确保在您的web.config中有以下内容
<modules runAllManagedModulesForAllRequests="true"></modules>
在您的system.webserver部分。
您可以做的另一件事是利用IIS中的位置标记来阻止用户访问网站的不同部分。
例如,您可以将其放在web.config
中 <location>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
这可确保只有经过身份验证的用户才能访问该网站。然后,您可以进一步完善此功能。
<location path="External">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
基本上,现在所有用户都可以使用/ External的任何请求(无论身份验证如何)。您可能希望将所有脚本放在此处,以便您需要未经身份验证的用户访问。
如果有一个您不希望任何人访问的特定目录,您可以执行类似
的操作 <location path="/Content/Scripts">
<system.web>
<authorization>
<deny users="*" />
</authorization>
</system.web>
</location>
现在,IIS中默认会阻止对该位置的任何访问。尝试一下,它应该满足你的要求,让脚本可用于捆绑,但如果有人直接浏览它,则无法访问。
答案 1 :(得分:0)
我只有一半得到了我想要的东西,但这就是我最终做的事情。我在站点级别启用了匿名身份验证,并对特定控制器使用了Forms身份验证。这就是我原来的方式,所以这里没有任何改变。
由于我正在使用捆绑包,因此用户永远不需要查看.js
,因此我按文件扩展名使用了Request Filtering,因此阻止任何.js
甚至.css
我不要不想暴露。
这是有效的,因为捆绑不会对这些文件发出http请求,而捆绑包本身也没有正常的JavaScript和CSS文件扩展名。
答案 2 :(得分:-1)
您无法在IIS级别处理此问题。您只需允许Anonymous Auth,然后将[Authorize]
添加到每个控制器。然后,只有在您的主页和登录操作中添加属性[AllowAnonymous]
。
至于问题的第二部分,你无法阻止这一点。 MVC捆绑在一起,所以它需要实际的文件。但是,如果它们从未被引用过,那么它们就是黑洞:用户无法知道要请求的文件,所以这是一种默默无闻的安全性。