[英]IIS 7.5 and making anonymous authentication/forms authentication play nicely together
我有一个在IIS网站的网站级别下运行的ASP.NET MVC 4应用程序。
因此目录结构如下所示:
\IIS
\Site
\bin
\Content
\Views
MVC 4应用程序通过用户名和密码使用表单身份验证,但是我需要锁定整个站点并在IIS级别上关闭匿名身份验证。
此要求的目标是仅允许用户登陆首页和登录页面。 问题是,如果我关闭匿名身份验证,则用户甚至无法回家或登录。
我们要防止用户通过浏览器访问/Content/Scripts/MyScript.js
另一件事。
我正在使用捆绑软件,所以那些文件在那里,除了我捆绑东西时不会被我使用。
由于IIS和MVC 4身份验证处于完全不同的级别,这是否有可能? 如果有可能,我有什么选择?
克里斯·普拉茨(Chris Pratts)的回答是正确的。 您可以成功地启用匿名身份验证,并让MVC4为您处理所有这些操作。
确保在您的web.config中具有以下内容
<modules runAllManagedModulesForAllRequests="true"></modules>
在您的system.webserver部分中。
您可以做的另一件事是利用IIS中的locations标记来防止用户访问站点的不同部分。
例如,您可以将其放在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中将禁止对该位置的任何访问。 尝试一下,它应该满足您的要求以使脚本可用于捆绑,但是如果有人直接浏览该脚本,则无法访问。
我只中途得到了想要的东西,但这就是我最终要做的。 我在站点级别启用了匿名身份验证,并且对特定控制器使用了Forms身份验证。 这就是我最初的想法,因此这里没有任何变化。
由于我使用的是捆绑软件,因此用户实际上不需要查看.js
因此我使用了按文件扩展名进行请求过滤的功能,因此可以阻止任何我不想公开的.js
甚至.css
。
之所以可行,是因为捆绑包不会向这些文件发出http请求,而且捆绑包本身没有正常的JavaScript和CSS文件扩展名。
您不能在IIS级别上处理此问题。 您只需允许匿名身份验证,然后将[Authorize]
添加到每个控制器。 然后,仅在您的家庭和登录操作上添加[AllowAnonymous]
属性。
至于问题的第二部分,您真的不能停止。 MVC会即时捆绑,因此它需要实际的文件。 但是,如果从未引用过它们,那将是一个黑洞:用户将无法知道要请求的文件,因此从某种程度上讲是安全的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.