【发布时间】:2012-07-11 23:23:04
【问题描述】:
我有一个可执行文件,我想限制谁可以下载。我有 UI 修剪到位,因此当用户无权下载可执行文件时链接不存在。我在 web.config 中设置了一条规则来保护资源免受未经授权的下载,但它似乎不起作用。
<location path="Utilities/SomeTool.exe">
<system.web>
<authorization>
<allow roles="SomeRole" />
<deny users="*"/>
</authorization>
</system.web>
</location>
当我尝试下载资源时看到的是登录页面,如果用户不属于应该能够下载资源的角色,这是正常的。
我可以更改 web.config 中的规则,使其允许特定用户,并且我可以使用该特定用户访问可执行文件,但这不起作用,因为我需要修改访问规则为每个添加到该角色的用户。
<location path="Utilities/SomeTool.exe">
<system.web>
<authorization>
<allow users="MyUserName"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
我已经设置了 web.config 以利用 IIS7 中的集成管道,方法是按照this page 的指示删除和重新添加模块列表。这应该将我的网站设置为将所有资源都视为 ASP.NET 资源。
有人知道我在 IIS7 的配置中可能缺少什么来保护可执行文件吗?
我已经想到了可以实施的其他解决方案,以保护可执行文件免遭未经授权的下载,例如创建链接将调用并返回资源的 Web 服务。然后在 Web 服务中,我可以在返回可执行文件之前执行用户角色的验证。但这似乎比我需要完成的工作要多。
这是我的 web.config 的 system.web 部分:
<system.web>
<compilation debug="false" targetFramework="4.0" />
<httpRuntime enableVersionHeader="false" requestValidationMode="2.0" />
<customErrors mode="RemoteOnly">
<error statusCode="404" redirect="~/MyErrorPage.aspx" />
</customErrors>
<authentication mode="Forms">
<forms timeout="60" ticketCompatibilityMode="Framework40" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
<sessionState timeout="60" />
<membership defaultProvider="MyMembershipProvider">
<providers>
<clear />
<add name="MyMembershipProvider" type="MyMembershipProvider" applicationName="MyApp" />
</providers>
</membership>
<roleManager defaultProvider="MyRoleProvider" enabled="true" cacheRolesInCookie="true" cookieTimeout="60">
<providers>
<clear />
<add name="MyRoleProvider" type="MyRoleProvider" applicationName="MyApp" />
</providers>
</roleManager>
</system.web>
附带说明一下,当 web.config 托管在 Visual Studio 2010 中时,它可以与我的网站一起使用,但在 IIS7 中运行时它会失败。
更新:我尝试根据角色保护 *.html 和 *.aspx 页面的不同资源,但我看到了相同的问题,即使用户确实属于适当的角色,也会被重定向到登录页面。
提前致谢。
【问题讨论】:
-
请发布您的授权配置 - 这样我们都可以看到您是如何实现自己的角色的。另一方面:我假设您说您确实属于“SomeRole”角色,但该网站正在将您踢到登录页面,什么时候应该允许下载?
-
@Adam 我不确定您所说的授权配置是什么意思,如果您指的是 system.web/authorization 部分,那么我已经发布了。否则,请更具体地说明您的意思。是的,我用来下载可执行文件的用户确实属于正确的角色。