使用Plack/PSGI/Poet应用程序进行身份验证和/或HTTPS

9
我需要构建一个简单的Web应用程序。我决定使用Poet(Mason2),它使用Plack。
该应用程序只允许经过身份验证的用户使用,因此我需要构建一些登录/密码功能。
已经有一个Plack模块Plack::Middleware::Auth::Basic,它允许使用基本用户认证,可以设置检查.htpasswd或类似文件。但基本身份验证不是很安全;任何人都可以通过抓包等方式获取登录密码。
以下是两种可能的解决方案:
  • 通过HTTPS(443)运行我的app.psgi - 链路级加密
  • 还有其他更好的身份验证方法可以在没有HTTPS的情况下进行安全身份验证吗?
问题:
  • 关于HTTPS - 我不知道如何通过HTTPS运行我的app.psgi。我需要修改我的应用程序吗?有没有链接可以向我展示如何在HTTPS上运行plackup
  • 或者第二个问题:是否有一些方法(中间件/或Perl模块)允许我在标准未加密端口(80)上构建安全的身份验证?

那么,有什么相对简单的方法可以实现Plack应用程序的安全身份验证?

PS:我不关心其他通信内容。我只需要安全的身份验证,不允许抓取密码。

PPS:使用Apache(和自签名)证书很容易实现https。但我不知道如何使用plackup(或任何其他基于Plack的服务器)实现它。

3个回答

12

另一个更简单的选择是使用内置于plackup、Starman和Thrall中的内容:

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

(或者)

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

(或者)

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

4
您可以将应用程序放在像Apache这样的服务器后面,该服务器知道如何安全地验证用户。
要实现这一点,您有两个选项:
  1. 使用FastCGI
  2. 代理请求到您的应用程序。
要使用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,这将限制您的选项为代理解决方案。


3
如果您选择使用Plack+Apache/mod_perl,Apache配置应如下所示:
<Location /path/myapp>
  SetHandler perl-script
  PerlResponseHandler Plack::Handler::Apache2
  PerlSetVar psgi_app /path/to/my.psgi
</Location>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接