9

我需要构建一个简单的网络应用程序。我决定与使用 Plack的Poet ( Mason2 ) 一起做。

该应用程序应该只允许经过身份验证的用户使用,所以我需要构建一些登录/密码功能。

已经有一个 Plack 模块Plack::Middleware::Auth::Basic允许使用基本用户身份验证,从而可以设置检查.htpasswd或类似的。但是基本认证不是很安全;任何人都可以通过抓包等方式获取登录密码。

这里有两种可能的解决方案:

  • 通过 HTTPS(443) 运行我的 app.psgi - 链接级加密
  • 还是有一些更好的身份验证方法可以在没有 https 的情况下进行安全身份验证?

问题:

  • 关于 HTTPS - 我不知道如何app.psgi通过 HTTPS 运行我的。我需要稍微修改我的应用程序吗?任何链接都告诉我如何plackup通过 https 运行?
  • 或者第二个:是否有某种方法(中间件/或 perl 模块)允许我在标准未加密端口上构建 安全身份验证?(80)

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

PS:我不关心其余的沟通。我只需要不允许获取密码的安全身份验证。

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

4

3 回答 3

12

另一个更简单的选择是使用 plakup、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=...
于 2014-07-17T16:10:19.497 回答
3

您可以在知道如何安全地验证用户身份的 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,这将限制您对代理解决方案的选择。

于 2013-07-08T18:59:30.257 回答
3

如果你使用 Plack+Apache/mod_perl,Apache 配置看起来像这样

<Location /path/myapp>
  SetHandler perl-script
  PerlResponseHandler Plack::Handler::Apache2
  PerlSetVar psgi_app /path/to/my.psgi
</Location>
于 2013-07-09T11:50:51.517 回答