IIS 虚拟目录获得预签名 URL 并过期

IIS Virtual Directory Get Pre Signed URL with Expiration

在 IIS 中,有没有办法定义某种 filtering rule 来拒绝访问虚拟目录中的文件,除非请求是 "pre signed" 通过某种加密查询字符串?还有没有办法让请求过期?我找不到控制它的方法。

我正在寻找的与 Amazon S3 Amazon.S3.Model.GetPreSignedUrlRequest.Expires 属性 提供的非常相似,但在 IIS 中。 Here 是对 Amazon S3 示例代码的 link。

期望目标场景:

请求:http://MyServerName/MyFolderThatIsAddedAsAVirtualDirectoryToDefaultWebsiteInIIS/MyImage.jpg 默认情况下应始终导致 "Access Denied"。但是,将特定查询字符串附加到请求 URL 应该可以访问该文件。另外,我需要 URL 在一段时间后过期,直到提供新的有效查询字符串。

您将需要某种 HTTP 模块来处理此问题,因为要实现 QueryString 匹配和过期的自定义逻辑。

  public class HttpFilterModule : IHttpModule
  {
    public void Dispose()
    {
    }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += context_BeginRequest;
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
        var qs = HttpContext.Current.Request.QueryString["SomeKeyToCheck"];
        var url = HttpContext.Current.Request.Url;

        if (MatchesUrl(url))
        {
            if (!IsAuthenticatedByQueryString(qs))
            {
                HttpContext.Current.Response.StatusCode = HttpStatusCode.Unauthorized;
                HttpContext.Current.Response.End();
            }
        }
    }

    private bool IsAuthenticatedByQueryString(string qs)
    {
        //  implement code here to check qs value
        //  probably against a DB or cache of tokens
        return true;
    }

    private bool MatchesUrl(Uri url)
    {
        //  implement code here to match the URL, 
        //  probably against configuration
        return true;
    }
}