2013-07-08 12 views
7

Ich muss eine einfache Web-Anwendung erstellen. Ich entschied mich, es mit Poet (Mason2) zu tun, die Plack verwendet.Authentifizierung und/oder HTTPS mit Plack/PSGI/Poet-Anwendung

Die Anwendung sollte nur von authentifizierten Benutzern verwendet werden dürfen, also muss ich einige Login/Passwort-Funktionalität erstellen.

Es gibt bereits ein Plack-Modul Plack::Middleware::Auth::Basic, das die Verwendung von Basic user auth ermöglicht, die es ermöglicht, das Setup zu überprüfen .htpasswd oder ähnliches. Die grundlegende Authentifizierung ist jedoch nicht sehr sicher. jeder kann das Login-Passwort mit Paketerfassung oder ähnlichem greifen.

Hier sind zwei mögliche Lösungen:

  • meine app.psgi über HTTPS läuft (443) - Link-Level-Verschlüsselung
  • oder gibt es eine bessere Authentifizierungsmethode, die sichere Auth ermöglichen, ohne https?

Die Fragen:

  • In Bezug auf HTTPS - ich habe keine Ahnung, wie meine app.psgi über HTTPS laufen. Muss ich meine Anwendung etwas ändern? Irgendwelche Links, die mir zeigen, wie man plackup über das https ausführt?
  • oder für die zweiten: gibt es eine Methode (Middleware/oder Perl-Modul), was mir sichere Authentifizierung gegenüber dem Standard unverschlüsselten Port (80)

So bauen kann, was eine relativ einfache Möglichkeit, um eine sichere Authentifizierung mit einer Plack-Anwendung zu erreichen?

PS: Mir ist der Rest der Kommunikation egal. Ich brauche nur sichere Authentifizierung, die nicht erlaubt, die Passwörter zu greifen.

PPS: https ist einfach mit Apache (und selbstsigniert) Zertifikat. Aber ich habe keine Ahnung, wie man es mit plackup (und jedem anderen Plack basierten Server) macht

Antwort

7

Eine andere einfachere Möglichkeit ist, zu verwenden, was in plackup gebaut ist, Starman und Thrall:

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

(oder)

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

(oder)

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

Sie könnten Ihre Anwendung hinter einem Webserver wie Apache ausführen, der weiß, wie man Benutzer sicher authentifiziert.

Um dies zu tun, haben Sie zwei Möglichkeiten:

  1. Verwenden FastCGI
  2. Proxy-Anfragen zu Ihrer App.

die FastCGI Weg zu gehen, plackup wie folgt verwenden:

plackup -s FCGI myapp.psgi 

Und in der Apache-Konfiguration, so etwas wie folgt verwenden:

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

Alternativ können Sie Apache Proxy-Anfragen machen zu Ihrer App:

ProxyPass /myapp http://localhost:5000/ 

Da plackup nicht für Produktionssysteme empfohlen wird, sollten Sie in Starman schauen, was Ihre Optionen auf die Proxy-Lösung beschränkt.

2

Der Apache Config sieht wie folgt aus, wenn Sie mit Plack + Apache/mod_perl gehen

<Location /path/myapp> 
    SetHandler perl-script 
    PerlResponseHandler Plack::Handler::Apache2 
    PerlSetVar psgi_app /path/to/my.psgi 
</Location>