我需要构建一个简单的web应用程序。我决定与Poet(Mason2)合作,后者使用Plack。
该应用程序应该只允许经过身份验证的用户使用,所以我需要构建一些登录/密码功能。
已经有一个Plack模块Plack::Middleware::Auth::Basic,它允许使用Basic用户身份验证,从而可以设置为检查.htpasswd
或类似内容。但是,基本的身份验证不是很安全;任何人都可以通过数据包捕获等方式获取登录密码。
以下是两种可能的解决方案:
- 通过HTTPS(443)-链接级加密运行我的app.psgi
- 或者有没有更好的身份验证方法可以在没有https的情况下进行安全身份验证
问题:
- 关于HTTPS,我不知道如何通过HTTPS运行我的
app.psgi
。我需要稍微修改一下我的应用程序吗?有什么链接告诉我如何通过https运行plackup
吗 - 第二:是否有某种方法(中间件/或perl模块)允许我在标准未加密端口上构建安全身份验证?(80)
那么,使用Plack应用程序实现安全身份验证的相对简单的方法是什么呢?
附言:我不在乎剩下的交流。我只需要不允许获取密码的安全身份验证。
PPS:https使用apache(和自签名)证书很容易。但我不知道如何使用plackup
(或任何其他基于Plack的服务器)
另一个更简单的选择是使用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=...
您可以在Apache这样的Web服务器上运行应用程序,该服务器知道如何安全地对用户进行身份验证。
要做到这一点,您有两个选项:
- 使用FastCGI
- 对您的应用程序的代理请求
要走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
,这将限制您对代理解决方案的选择。
如果使用Plack+Apache/mod_perl ,Apache配置如下所示
<Location /path/myapp>
SetHandler perl-script
PerlResponseHandler Plack::Handler::Apache2
PerlSetVar psgi_app /path/to/my.psgi
</Location>