В IIS6, как обеспечить аутентифицированный доступ к статическим файлам на удаленном сервере
У нас есть библиотека ZIP-файлов, которую мы хотели бы сделать доступными для загрузки на сайте ASP.NET.
Файлы хранятся на устройстве NAS, доступном из веб-фермы.
Вот наша первоначальная стратегия:
- Сопоставьте виртуальный каталог IIS с общим диском в пути /zipfiles
- Пользователи могут загружать zip-файлы при наличии URL-адреса.
Однако, если пользователи делятся ссылками на файлы, любой может их скачать. Вместо этого мы хотели бы использовать проверку подлинности с помощью форм ASP.NET на нашем сайте для проверки запросов пользователей перед началом передачи файла.
Несколько проблем: Запрос на zip-файл обрабатывается IIS, а не ASP.NET. Так что это не подлежит проверке подлинности форм. Кроме того, мы не хотим, чтобы ASP.NET обрабатывал запрос, поскольку он использует поток ASP.NET и не масштабируется для загрузки больших файлов. Таким образом, настройка dll asp.net для обработки *.zip запросов не возможна.
Есть идеи по этому поводу?
Одна из идей, которую мы оставили, заключается в следующем: начальный запрос на загрузку будет обработчиком ashx. Этот обработчик после аутентификации сгенерирует маркер загрузки, который сохраняется в базе данных. Затем пользователь перенаправляется в файл с токеном, добавленным в QueryString (например, /files/xyz.zip?token=123456789). Плагин ISAPI будет использоваться для проверки токена. Кроме того, токен истекает через x времени. Есть мысли по этому поводу? Я не реализовал плагин ISAPI, поэтому я не уверен, будет ли это работать.
Я хотел бы избежать пользовательского кодирования, поскольку безопасность является проблемой, и я бы предпочел использовать проверенное временем решение.
2 ответа
Проверка подлинности с помощью форм не может выполняться без ASP.NET.
Если вы вообще не хотите использовать ASP.NET, вы можете определить NTFS-разрешение для файла и создать учетные записи домена для ваших пользователей. Это быстро станет кошмаром.
Чтобы справиться с большими загрузками в ASP.NET, вы можете взглянуть на Comet. Это в основном IHttpHandler
но вам нужно будет использовать другой ThreadPool (не ASP.NET). Я предлагаю взглянуть на Smart Thread Pool.
Я совместил несколько месяцев назад, чтобы создать приложение для регулирования скорости загрузки, и теперь работает очень гладко.
Я прочитал и понимаю вашу озабоченность по поводу использования обработчика для управления статическими файлами, но если вы используете асинхронный обработчик, вы не будете блокировать.
Я думаю, что вы можете получить результаты, которые вы ищете по справедливой цене.