xenon
@xenon
Too drunk to fsck

Как сделать быстрый веб-сервер для статики но с аутентификацией?

Или: Как приложению разделить данные сессии с веб-сервером, а веб-серверу использовать их для контроля доступа?

Приложение (написанное на чем-то относительно медленном, вроде python) выполняет аутентификацию (каким-то сложным путем, вроде OAuth2, OpenID Connect), а затем пользователь должен получать свои файлы с сервера. Естественно, нельзя чтобы user1 мог получить файлы user2. Конечно, раздачу файлов можно сделать и через питон, и там проверять кто запрашивает и есть ли у него на это право. Но это медленно.

А можно ли как-то перепоручить это быстрому вебсерверу (apache/nginx/другой), каким-то образом передав ему данные аутентификации? Пусть медленное приложение делает аутентификацию (ее делают редко), а все запросы аутентифицированного клиента вебсервер уже сам быстро обрабатывает.

Может быть какие-то модули для веб-серверов поддерживают такую функциональность?

Задача 1 (простая)
Вебсервер обслужит запрос GET /users/user1/myfile.txt только если в запросе есть какие-то правильные куки, которые будут либо криптографически подписаны, либо где-то в базе числится активными. Куку выставляет приложение при успешной аутентификации. Соответственно, просто GET запрос без авторизации не пройдет.

Задача 2 (сложнее)
Вебсервер еще и проверяет соответствие куки запросу, То есть, для запроса /users/user1/myfile.txt надо чтобы кука соответствовала именно user1, а не user2.

Задача 3 (сложная)
Вебсервер еще и выбирает путь документа в зависимости от авторизованного пользователя. Например, GET /myfile.txt отправит /users/<USERNAME>/myfile.txt, в зависимости от имени юзера.

Если сделать простой вебсервер на Go, (который, вроде, быстрый) - и там сделать этот функционал - сильно ли мы потеряем в производительности по сравнению с nginx?

Думаю, если сделать это для GET, то и легко можно будет сделать для PUT/DELETE? Тогда легким движением руки вебсервер превращается в файлопомойку с аутентификацией.
  • Вопрос задан
  • 537 просмотров
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Просто настроить авторизацию oauth на Nginx и всё.
Ответ написан
Комментировать
RAFAILgaley
@RAFAILgaley
обычная базовая аутентификация?
и можно без кук обойтись
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы