2013-07-08 26 views
7

Potrzebuję zbudować prostą aplikację internetową. Postanowiłem zrobić to z Poet (Mason2), który wykorzystuje Plack.Uwierzytelnianie i/lub HTTPS z aplikacją Plack/PSGI/Poet

Aplikacja powinna być dozwolona do użytku tylko przez uwierzytelnionych użytkowników, więc potrzebuję zbudować trochę funkcji logowania/hasła.

Istnieje już moduł Plack Plack::Middleware::Auth::Basic, który umożliwia korzystanie z podstawowego uwierzytelniania użytkownika, co umożliwia konfigurację w celu sprawdzenia, czy jest to .htpasswd lub podobny. Ale podstawowe uwierzytelnianie nie jest bardzo bezpieczne; każdy może pobrać hasło logowania z przechwytywaniem pakietów lub tym podobne.

Tu są 2 możliwe rozwiązania:

  • prowadzę app.psgi poprzez HTTPS (443) - poziom szyfrowania łącza
  • lub czy jest jakiś lepszy sposób uwierzytelniania, które umożliwiają bezpieczny auth bez https?

pytania:

  • Odnośnie HTTPS - nie mam pojęcia jak uruchomić mój app.psgi poprzez HTTPS. Czy muszę nieco zmodyfikować moją aplikację? Każdy link, który pokazuje, jak uruchomić plackup przez https?
  • lub drugi: czy jest jakiś sposób (middleware/lub Perl), co pozwala mi budować bezpiecznego uwierzytelniania przez standardowy port niezaszyfrowanej (80)

Więc, co jest względne łatwy sposób uzyskać bezpieczne uwierzytelnianie za pomocą aplikacji Plack?

PS: Nie dbam o resztę komunikacji. Potrzebuję tylko bezpiecznego uwierzytelnienia, które nie pozwala na pobieranie haseł.

PPS: https jest łatwe z certyfikatem Apache (samopodpisanym). Ale nie mam pojęcia, jak to zrobić z plackup (i lub dowolnym innym serwerem opartym na Plackach)

Odpowiedz

7

Inną prostsze opcją jest użycie co wbudowane plackup, Starman, a Thrall:

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

(lub)

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

(lub)

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

Możesz uruchomić swoją aplikację za jakimś webserwerem, takim jak Apache, który wie, jak bezpiecznie uwierzytelniać użytkowników.

Aby to zrobić, masz dwie opcje:

  1. Zastosowanie FastCGI
  2. wnioski pełnomocnika do swojej aplikacji.

Aby przejść trasę FastCGI, użyj plackup takiego:

plackup -s FCGI myapp.psgi 

A w konfiguracji Apache, należy użyć coś takiego:

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

Alternatywnie, można dokonać żądania proxy Apache do Twojej aplikacji:

ProxyPass /myapp http://localhost:5000/ 

Ponieważ plackup nie jest zalecany do systemów produkcyjnych, powinieneś zajrzeć do Starman, co ograniczy Twoje opcje do rozwiązania proxy.

2

Apache config wygląda tak, jeśli się z Plack + Apache/mod_perl

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