Аутентификация и / или HTTPS с приложением Plack/PSGI/Poet

Мне нужно создать простое веб-приложение. Я решил сделать это с поэтом ( Mason2), который использует Plack.

Приложение должно быть разрешено использовать только аутентифицированным пользователям, поэтому мне нужно создать некоторые функции логина и пароля.

Уже есть модуль Plack Plack::Middleware::Auth::Basic, который позволяет использовать обычную аутентификацию пользователя, что позволяет настроить проверку .htpasswd или похожие. Но базовая аутентификация не очень безопасна; любой может получить пароль для входа в систему с помощью перехвата пакетов или тому подобного.

Вот 2 возможных решения:

  • запуск моего app.psgi через HTTPS(443) - шифрование на канальном уровне
  • или есть какой-то лучший метод аутентификации, который позволяет безопасную аутентификацию без https?

Вопросы:

  • Что касается HTTPS - я понятия не имею, как запустить мой app.psgi через HTTPS. Нужно ли немного изменить свое приложение? Любая ссылка, которая показывает мне, как запустить plackup через https?
  • или для второго: есть ли какой-то метод (промежуточное программное обеспечение / или модуль Perl), который позволяет мне создавать безопасную аутентификацию через стандартный незашифрованный порт?(80)

Итак, каков относительно простой способ обеспечить безопасную аутентификацию с помощью приложения Plack?

PS: мне нет дела до остального общения. Мне нужна только безопасная авторизация, которая не позволяет получить пароли.

PPS: https легко с Apache (и самоподписанный) сертификат. Но я понятия не имею, как это сделать с plackup (и любой другой сервер на базе Plack)

3 ответа

Решение

Другой более простой вариант - использовать то, что встроено в plackup, Starman и Thrall:

plackup --enable-ssl --ssl-key-file=... --ssl-cert-file=...

(или же)

starman --enable-ssl --ssl-key-file=... --ssl-cert-file=...

(или же)

thrall --enable-ssl --ssl-key-file=... --ssl-cert-file=...

Вы можете запустить свое приложение на каком-то веб-сервере, таком как Apache, который знает, как безопасно аутентифицировать пользователей.

Для этого у вас есть два варианта:

  1. Используйте FastCGI
  2. Прокси-запросы к вашему приложению.

Чтобы пройти маршрут FastCGI, используйте plackup как это:

plackup -s FCGI  myapp.psgi

И в вашей конфигурации Apache используйте что-то вроде этого:

LoadModule fastcgi_module libexec/mod_fastcgi.so
<IfModule mod_fastcgi.c>
    FastCgiExternalServer /tmp/myapp.fcgi -host localhost:5000
    Alias /myapp/    /tmp/myapp.fcgi/
</IfModule>

Кроме того, вы можете отправлять запросы прокси-сервера Apache в свое приложение:

ProxyPass /myapp    http://localhost:5000/

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

Конфигурация Apache выглядит следующим образом, если вы используете Plack+Apache/mod_perl

<Location /path/myapp>
  SetHandler perl-script
  PerlResponseHandler Plack::Handler::Apache2
  PerlSetVar psgi_app /path/to/my.psgi
</Location>
Другие вопросы по тегам