我正在尝试阻止未经授权访问Kentico v9.0中某些媒体库中的所有文件。我打算只通过Kentico Role成员资格和全局管理员提供对某些图书馆的访问权。
我已按照此处发布的指南进行操作:Securing media libraries它似乎工作正常:直接网址路径访问会导致 401.2 - 未经授权消息,无论用户身份验证状态和角色成员身份如何。我正确设置了媒体库Web部件,以提供永久性URL,这也可以按照我的预期运行。
但是,我有另一个要求;这是为了提供〜/ googlesitemap.xml文件。我按照这里发布的指南:Google Sitemaps,指示我为web.config中的system.webServer / modules节点提供一个属性:
<modules runAllManagedModulesForAllRequests="true">
...
</modules>
但是,当我添加上述内容时,如果任何经过身份验证的用户输入完整的URL,则可以访问我的媒体库文件。这违反了我基于角色成员身份访问媒体库的尝试;因为我不希望其他角色的用户能够获取文件。
我尝试通过在 设置&gt;中添加我的媒体文件夹根目录作为排除网址,从重写引擎中排除所有媒体库文件。网址和SEO&gt;网址格式&gt;排除的网址 ...但这似乎没有帮助。
非常欢迎任何建议!
答案 0 :(得分:2)
据我所知 runAllManagedModulesForAllRequests 属性仅对不同的扩展(不同于.aspx)是必需的。如果您使用的是IIS 7或更高版本,则可以在web.config中省略此属性(请参阅source)。
注意:在ASP.NET网站中,之前必须将runAllManagedModulesForAllRequests的值设置为true以支持路由。但是,一旦使用Service Pack更新了IIS 7,在使用ASP.NET路由时,runAllManagedModulesForAllRequests的值可以设置为false或省略。有关详细信息,请参阅MSDN网站上的ASP.NET路由。
快速修复:不要将此属性添加到web.config,您的媒体库(权限)应该可以按照您的意愿工作。
编辑:所以我想我已经找到了解决方案。似乎 runAllmanagedModulesForAllRequests 属性kills匿名身份验证设置,因此Kentico在成功验证后提供数据。我找到了解决方法,因此您可以禁止访问媒体库。尝试添加类似的内容:<location path="MySite/media/MyMediaLibrary">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
进入配置部分内的web.config。