2013-07-08 21 views
7

Tôi cần xây dựng một ứng dụng web đơn giản. Tôi quyết định làm điều đó với Poet (Mason2), sử dụng Plack.Xác thực và/hoặc HTTPS với ứng dụng Plack/PSGI/Poet

Ứng dụng chỉ được phép sử dụng bởi người dùng được xác thực, vì vậy tôi cần xây dựng một số chức năng đăng nhập/mật khẩu.

Đã có mô-đun Plack Plack::Middleware::Auth::Basic cho phép sử dụng xác thực người dùng cơ bản để có thể thiết lập để kiểm tra .htpasswd hoặc tương tự. Nhưng xác thực cơ bản không phải là rất an toàn; bất cứ ai cũng có thể lấy mật khẩu đăng nhập với gói chụp hoặc tương tự.

Dưới đây là 2 giải pháp khả thi:

  • chạy app.psgi tôi qua HTTPS (443) - mã hóa mức độ liên kết
  • hoặc là có một số phương pháp auth tốt hơn cho phép auth an toàn mà không cần https?

Những câu hỏi:

  • Về HTTPS - Tôi không có ý tưởng làm thế nào để chạy app.psgi tôi qua HTTPS. Tôi có cần sửa đổi ứng dụng của mình không? Bất kỳ liên kết nào cho tôi biết cách chạy plackup qua https?
  • hoặc cho phần thứ hai: là có một số phương pháp (middleware/hoặc mô-đun perl) những gì cho phép tôi xây dựng an toàn xác thực qua cổng không được mã hóa tiêu chuẩn (80)

Vì vậy, những gì là một cách tương đối dễ dàng thế nào để đạt được xác thực an toàn với một ứng dụng Plack?

PS: Tôi không quan tâm đến phần còn lại của giao tiếp. Tôi chỉ cần auth bảo mật mà không cho phép lấy mật khẩu.

PPS: https rất dễ dàng với chứng chỉ apache (và tự ký). Nhưng tôi không biết làm thế nào để làm điều đó với plackup (và hoặc bất kỳ máy chủ dựa trên Plack nào khác)

Trả lời

7

Một tùy chọn khác đơn giản hơn là sử dụng những gì đang được xây dựng vào plackup, Starman, và Thrall:

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

(hoặc)

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

(hoặc)

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

Bạn có thể chạy ứng dụng của mình phía sau một số máy chủ web như Apache biết cách xác thực người dùng một cách an toàn.

Để làm điều này, bạn có hai lựa chọn:

  1. Sử dụng FastCGI
  2. Proxy yêu cầu ứng dụng của bạn.

Để đi con đường FastCGI, sử dụng plackup như thế này:

plackup -s FCGI myapp.psgi 

Và trong cấu hình Apache của bạn, sử dụng một cái gì đó như thế này:

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

Ngoài ra, bạn có thể làm cho các yêu cầu proxy Apache vào ứng dụng của bạn:

ProxyPass /myapp http://localhost:5000/ 

Vì không nên sử dụng plackup cho hệ thống sản xuất, bạn nên xem xét Starman, điều này sẽ giới hạn tùy chọn của bạn đối với giải pháp proxy.

2

Apache cấu hình trông như thế này, nếu bạn đi với Plack + Apache/mod_perl

<Location /path/myapp> 
    SetHandler perl-script 
    PerlResponseHandler Plack::Handler::Apache2 
    PerlSetVar psgi_app /path/to/my.psgi 
</Location> 
Các vấn đề liên quan