Виртуальный каталог IIS Получить предварительно подписанный URL с истечением срока действия
В IIS, есть ли способ определить какое-то правило фильтрации, чтобы запретить доступ к файлам в виртуальном каталоге, если запросы не "предварительно подписаны" какой-то зашифрованной строкой запроса? Также есть ли способ заставить запрос истечь? Я не могу найти способ контролировать это.
То, что я ищу, очень похоже на то, что Amazon S3 Amazon.S3.Model.GetPreSignedUrlRequest.Expires
имущество доставляет, но в IIS. Вот ссылка на пример кода Amazon S3.
Сценарий желаемой цели:
Запрос: http://MyServerName/MyFolderThatIsAddedAsAVirtualDirectoryToDefaultWebsiteInIIS/MyImage.jpg по умолчанию всегда должен приводить к "Отказано в доступе". Тем не менее, добавление определенной строки запроса к URL запроса должно дать доступ к файлу. Кроме того, мне нужно, чтобы URL истек через определенный период времени, пока не будет предоставлена новая действительная строка запроса.
1 ответ
Вам понадобится какой-то 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;
}
}