繁体   English   中英

IIS 7.5和使匿名身份验证/表单身份验证很好地配合使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM