URL授权和nonAsp.Net相关的文件类型

时间:2009-05-10 21:23:16

标签: asp.net authentication asp.net-membership forms-authentication authorization


URL授权仅适用于与Asp.Net相关的文件类型?1但为什么它也不能应用于nonAsp.Net文件类型?


感谢名单

1 个答案:

答案 0 :(得分:2)

这是因为ASP.NET的脚本映射。只有某些扩展名映射到ASP.NET。其余的由IIS直接处理。出于性能原因,这是设计使然。

有两种方法可以解决这个问题。

  1. 在NTFS文件ACL中的web.config文件中复制授权规则(即直接设置文件夹和文件的权限)。确保用户的身份验证方案与用于控制访问的帐户和组相匹配...换句话说,如果您使用SQL来存储用户名令牌,这将无效,因为这些令牌不一定映射回域用户和组/角色。

  2. 创建IHttpHandler以提供非ASP.NET文件。从ProcessRequest方法,在传入的URL上调用Server.MapPath(url)方法,然后使用Response.WriteFile(filename)流出文件。您可能需要先设置ContentType属性。而且,(这是坏消息),您可能仍需要执行声明性或命令性访问检查 - 只是让web.config文件中的条目可能无法正常工作。有关编写自己的处理程序的更多信息,请参阅Custom ASP.NET Processing with HTTP。为每种内容类型制作单独的处理程序可能是个好主意。一旦你写了一个,你就会发现它们有多容易。

  3. 你可以尝试(我自己没试过)添加< httpHandlers> web.config文件中的元素,其中包含其他< authorization>元素 - 使用< remove>元素删除继承的HttpHandler并在子文件夹级别添加另一个(可能指向同一个类?)。我不确定这会有效,但值得一试。

    最后,如果你真的不想完成所有这些工作,你可以在IIS中添加更多的扩展名映射。例如,看看How to: Register HTTP Handlers,您可以将.jpg文件的映射添加到aspnet_isapi.dll(查看.aspx的现有映射等)。您不需要在web.config中添加HttpHandler元素,因为机器级web.config已包含此条目:

    <add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="true"/>
    

    请注意,这可能会对您的网站造成严重的性能问题。