2014-03-07 55 views
0

我有一个ASP.NET MVC 4应用程序,我在IIS网站的网站级别下运行。IIS 7.5和使匿名身份验证/窗体身份验证很好地一起玩

所以目录结构如下:

\IIS 
    \Site 
     \bin 
     \Content 
     \Views 

的MVC 4应用程序通过用户名和密码使用窗体身份验证,但我有一个要求,锁定完整的网站,并在IIS关闭匿名身份验证水平。

此要求的目标是允许用户只登陆主页和登录页面。问题是,如果我关闭匿名身份验证,则用户甚至无法回家或登录。

我们希望阻止用户在浏览器中访问/Content/Scripts/MyScript.js的另一件事。

我正在使用捆绑,所以那些文件在那里,除了当我捆绑东西时不要被我使用。

这是甚至可能的,因为IIS和MVC 4身份验证是在完全不同的级别?如果有可能我有什么选择?

回答

0

我只有一半得到了我想要的,但这是我最终做的。我在站点级别启用了匿名身份验证,并对特定控制器使用了表单身份验证。这是我原来的样子,所以在这里没有任何改变。

由于我使用的捆绑用户从未真正需要看.js所以我用Request Filtering按文件扩展名,以便阻止任何.js甚至.css我不想暴露。

这是有效的,因为绑定不会向这些文件发出http请求,而且绑定本身没有正常的JavaScript和CSS文件扩展名。

-1

您不在IIS级别处理此操作。您只需允许匿名身份验证,然后将[Authorize]添加到每个控制器。然后,只有在您的家庭和登录操作中添加属性[AllowAnonymous]

至于你的问题的第二部分,你不能真的阻止这一点。 MVC捆绑在一起,所以它需要实际的文件在那里。但是,如果他们从来没有被引用,那么他们就是黑洞:用户无法知道要请求什么文件,所以这是一种默默无闻的安全措施。

+0

我意识到这是一个奇怪的情况,但这就是安全人员想要的... – edhedges

+0

我明白它是如何工作的。你的讽刺是不专业的,并没有帮助。我只是想知道我问的是否可能。我已经有了MVC来处理我的安全问题。 – edhedges

+0

它被称为*幽默*。而且,在你仅仅因为你不喜欢答案而退缩答案之前,请实际阅读常见问题解答:“当你遇到一个非常草率的,没有努力的帖子,或者答案很清楚或许危险地不正确。“ (http://stackoverflow.com/help/privileges/vote-down)这些条件都没有描述我的答案。我给了你最好的答案,尽管你创造了自己的答案,而不是接受我的或其他人的答案,但你最终会接受的。 –

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被阻止。试一试,它应该满足您的要求,让脚本可用于捆绑,但如果有人直接浏览它,则无法访问。

+0

感谢您的详细解答。我走了一个不同的方向,但我感谢你的帮助。 – edhedges

+0

没问题。请求过滤是解决此问题的有趣方法。 – CtrlDot