2012-01-05 86 views
2

我在我的网站的根目录上有一个目录,其中包含一些文件(通常为html)。这些文件只能被登录用户访问。我怎样才能做到这一点?我相信这可以通过模拟来完成,但我不知道我能够如何实现它。你能指导我正确的方向吗?ASP.Net目录安全

目前,我已经添加了这些设置,以我的Web.config文件:

<location path="TestData"> <!-- 'TestData' is the directory which I want to deny access for --> 
    <system.web> 
     <identity impersonate="true"/> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
    </system.web> 
</location> 

有什么,我有编码做?

PS:这是一个web服务应用程序。

更新:它的工作部分!具体如下: 它只拒绝.aspx页面,甚至登录的用户也无法访问这些文件。

我正在使用Windows身份验证。

回答

1

你不需要模仿。如果您有窗体或Windows身份验证,您的<deny users="?"/>将拒绝所有匿名用户。要回答你的问题:不,你不必在代码中明确拒绝任何用户。

How to: Implement Simple Forms Authentication

为了确保non-ASP.NET文件,你需要注册一个HttpHandler会做到这一点。请参阅this reference on how to register the handler

+0

我已经更新了我的问题。 – NaveenBhat 2012-01-05 13:37:54

+0

@Knvn你是否拿出'impersonate'部分?您不应该获得部分访问权限,因为您拥有目录授权。 – 2012-01-05 13:50:30

+0

雅我尝试删除'impersonate'部分,但它仍然只适用于'.aspx',而不是其他类型,如'.html'或'.txt' – NaveenBhat 2012-01-05 13:59:08

0

你不需要模仿。 Impersonate用于使应用程序以不同于iis中应用程序池用户的用户身份运行。 source

如果您正在使用表单/ Windows身份验证,然后

<authorization> 
    <deny users="?"/> 
</authorization> 

应该足够,并会阻止

+0

我已更新我的问题。 – NaveenBhat 2012-01-05 13:38:29

0

未登录用户谁您需要添加

<authorization> 
     <deny users="?"/> 
</authorization> 

<system.web></system.web>

并使用表单认证l IKE

[更新]:在您使用窗口认证见

MSDN

+0

我可以使用'Forms'认证,如果它是一个web应用程序......但它是一个web服务应用程序,并且通过向客户端应用程序返回适当的值进行认证(flash)。 – NaveenBhat 2012-01-05 13:53:14