Лучший способ выполнить аутентификацию на каждый запрос - PullRequest
0 голосов
/ 31 мая 2010

В моем приложении asp.net mvc 2 я задаюсь вопросом о том, как лучше всего это реализовать:

  • Для каждого входящего запроса мне нужно выполнить пользовательскую авторизацию, прежде чем разрешить обслуживание файла. (Это основано на заголовках и содержимом строки запроса. Если вы знакомы с тем, как Amazon S3 выполняет аутентификацию покоя - именно это).

Я бы хотел сделать это максимально возможным способом, что, вероятно, означает максимально легкое касание, когда IIS выполняет как можно большую часть реальной работы.

Служба должна будет обрабатывать запросы GET, а также записывать новые файлы, поступающие через запросы POST / PUT.

Запросы относятся к произвольному файлу, поэтому это может быть:

GET http://storage.foo.com/bla/egg/foo18/something.bin

POST http://storage.foo.com/else.txt

Прямо сейчас я наполовину реализовал это, используя IHttpHandler, который обрабатывает все маршруты (с rout.RouteExistingFiles = true), но не уверен, что это лучше, или я должен подключиться к жизненному циклу где-то еще?

Меня также интересует поддержка частичной загрузки с помощью заголовка Range. Использование

* * 1 022 response.TransmitFile (finalPath); * +1023 *

как я сейчас имею в виду, мне придется делать это вручную, что немного низкоуровнево?

Большое спасибо за любые указатели.

(IIS7)

Ответы [ 2 ]

0 голосов
/ 01 июня 2010

TransmitFile - это самый легкий программный способ обработки файла, который мне известен.

Однако вам может не потребоваться написать собственный HttpHandler. Вы можете использовать обработчик MVC и просто назначить действие контроллера на задание. Что-то вроде:

http://storage.foo.com/Files/Download/SomeFileIdentifier

... маршрутизация к ...

public FilesController
{
   public ActionResult Download(string id)
   {
      //...some logic to authenticate and to get the local file path

      return File(theLocalFilePath, mimeType);
   }
}

Метод File () контроллера использует TransmitFile в фоновом режиме, я считаю.

(PS, если вы хотите более короткие URL, делайте это по пользовательским маршрутам в global.asax.)

0 голосов
/ 31 мая 2010

Я думаю, что иметь собственный обработчик посередине, который позаботится об этом, именно так и нужно делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...