保护公共下载链接

时间:2010-07-28 09:21:56

标签: asp.net silverlight file download

我有SL应用程序,我应该实现文件管理子系统。我有文件\文件夹的层次结构(只是描述)。此外,每个文件\文件夹都有自己对用户\组的权限。我想实现一个有权下载文件的用户无法将其提供给没有此权限的其他用户。因此,如果用户有下载权限,他可以链接www.site.com/file.rar并下载它。但他可以在未经许可的情况下将此链接提供给另一个人在这种情况下,哪种算法更合适?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

Web服务器需要负责并为任何文件请求提供身份验证和授权。它不是特定于Silverlight,因为这是一个普遍的问题。

您的Web服务器必须针对当前登录的用户验证每个文件下载请求(如果您使用的是ASP.NET,则可以使用其中一种身份验证方法,例如Forms Auth或Windows Auth)。您可能有一个HTTP处理程序,例如,它执行此验证并允许下载(并提供下载文件的字节)。 Here's一个较旧的示例,但看起来它仍然适用于ASP.NET。

或者,您可以提供安全生成,过期(可能一次性使用?),令牌代替文件名,该映射到预先授权的文件请求,并再次按需提供文件。这个在很多方面更难以管理,如果不仔细地进行,可能会导致用户体验不太愉快(特别是如果下载可能被中断并且需要重新启动,那么旧令牌可能无效等等)。

我会选择第一个建议,因为它更可靠,更容易控制和管理(忽略技术细节,因为所有网络平台都可以使用该模式)。

答案 1 :(得分:0)

您可以在数据库中存储权限信息。然后每个用户都有自己的帐户和权限集。然后,您可以将用户组权限设置为文件组或单个文件。

这可能也可以使用存储在操作系统级别的文件权限信息来实现。

然后,您可以拥有一个动态页面,该页面将文件名作为请求,并验证用户名和密码组合,并检查该人是否允许该文件。

因此,当有人访问该文件链接时,他们首先必须提供正确的下载凭据,否则他们将被拒绝访问。

我希望这会有所帮助,它不是直接的SilverLight答案,而是更多语言不可知