I need to build a simple web-application. I decided to do it with Poet (Mason2), which uses Plack.
The application should be allowed to use only by authenticated users, so I need build some login/password functionality.
There already is a Plack module Plack::Middleware::Auth::Basic that allows using Basic user auth that makes it possible to setup to check .htpasswd or similar. But the basic authentication is not very secure; anybody can grab the login password with packet capturing or the like.
Here are 2 possible solutions:
The questions:
app.psgi via HTTPS. Do I need to modify my application somewhat? Any link what shows me how to run plackup over the https?So, what is an relative easy way to achieve secure authentication with a Plack application?
PS: I don't care about the rest of communication. I only need secure auth that doesn't allow to grab the passwords.
PPS: https is easy with apache (and self-signed) certificate. But I have no idea how to do it with plackup (and or any other Plack based server)
Another more simple option is to use what's built into plackup, Starman, and Thrall:
plackup --enable-ssl --ssl-key-file=... --ssl-cert-file=...
(or)
starman --enable-ssl --ssl-key=... --ssl-cert=...
(or)
thrall --enable-ssl --ssl-key-file=... --ssl-cert-file=...
You could run your application behind some webserver like Apache that knows how to safely authenticate users.
To do this, you have two options:
To go the FastCGI route, use plackup like this:
plackup -s FCGI myapp.psgi
And in your Apache config, use something like this:
LoadModule fastcgi_module libexec/mod_fastcgi.so
<IfModule mod_fastcgi.c>
FastCgiExternalServer /tmp/myapp.fcgi -host localhost:5000
Alias /myapp/ /tmp/myapp.fcgi/
</IfModule>
Alternatively, you can make Apache proxy requests to your app:
ProxyPass /myapp http://localhost:5000/
Since plackup is not recommended for production systems, you should look into Starman, which will limit your options to the proxy solution.
The Apache config looks like this, if you go with Plack+Apache/mod_perl
<Location /path/myapp>
SetHandler perl-script
PerlResponseHandler Plack::Handler::Apache2
PerlSetVar psgi_app /path/to/my.psgi
</Location>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With