有没有办法创建一个受保护的下载链接,该链接是随机的,过期的,需要密码并指向C#中与IIS 7.0关联的特定文件?创建受保护的链接
几个随机链接可以链接到同一个文件。
内置代码或可能是第三方库?
例如,http://www.example.com/<some random gibberish>/<md5 of file>/file.jpg
有没有办法创建一个受保护的下载链接,该链接是随机的,过期的,需要密码并指向C#中与IIS 7.0关联的特定文件?创建受保护的链接
几个随机链接可以链接到同一个文件。
内置代码或可能是第三方库?
例如,http://www.example.com/<some random gibberish>/<md5 of file>/file.jpg
一种方式做,这是使用的GUID。 GUID被设计为不会相互碰撞,并且该设计也会导致难以猜测有效的GUID。我确信有人会告诉我这不是很安全!那么,你也用密码保护。在C#中生成一个GUID非常容易。
我猜你需要的是首先采用这种方式摄取要保护的文件,其次是处理器将响应给定路径中的请求并检查路径中的GUID以确定它是有效。
然后,您需要一个数据库后端来维护与URL相对应的GUID列表,密码(最好是加密的)和到期日期。该处理程序将检查所请求的URL/GUID的条目以查看链接是否已过期,然后提示用户(可通过Web表单轻松完成此操作)密码,并根据存储在数据库中的加密密码进行检查。
要生成一个GUID,你想:
System.Guid.NewGuid().ToString()
要创建一个名为模块(用于IIS7)每一个请求,然后才能将条目添加到您的web.config中像这样:
<modules>
<add name="MyDownloadModule" type="Example.MyDownloadModule, Example"/>
</modules>
其中MyDownloadModule是包含您的处理程序的类,位于名称空间示例中。
该类那么你需要实现IHttpModule接口内部,特别是重载方法:
public string ModuleName {
get { return "MyDownloadModule"; }
}
public void Init(HttpApplication app) {
// Add an event handle which is called at the beginning of each request
app.BeginRequest += new EventHandler(this.AppBeginRequest);
}
//
// Our event handler for the BeginRequest event
//
private void AppBeginRequest(Object source, EventArgs e)
{
HttpRequest request = app.Context.Request;
//
// Is this a file download?
//
if (request.AppRelativeCurrentExecutionFilePath == "~/downloads") // or whatever
{
// this is where you work your GUID inspecting magic
}
}
走向看,这种方式意味着这将是呼吁每向服务器发出请求,这可能不是你想要的。
您可以随时创建自己的HttpHandler,然后实现自己的专有过期/验证代码。
喜欢的东西:
http://www.example.com/download?token={your_token}
然后,它将是一件微不足道的小事有处理器拦截请求,并抓住从磁盘上的文件,并将其交付给客户如果令牌查询字符串值是正确的?
有关IHttpHandler接口的详细信息,请参阅MSDN http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx