Аутентификация и / или 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, который знает, как безопасно аутентифицировать пользователей.
Для этого у вас есть два варианта:
- Используйте FastCGI
- Прокси-запросы к вашему приложению.
Чтобы пройти маршрут 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>