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

时间:2013-07-08 15:56:29

标签: perl plack psgi poet

我需要构建一个简单的Web应用程序。我决定使用PoetMason2),它使用Plack。

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

Plack模块Plack::Middleware::Auth::Basic允许使用基本用户身份验证,可以设置检查.htpasswd或类似功能。但基本身份验证不是很安全;任何人都可以通过数据包捕获等方式获取登录密码。

以下是两种可能的解决方案:

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

问题:

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

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

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

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

3 个答案:

答案 0 :(得分:11)

另一个更简单的选择是使用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=...

答案 1 :(得分:3)

您可以在一些知道如何安全地验证用户身份的Apache等Web服务器后面运行您的应用程序。

为此,您有两种选择:

  1. 使用FastCGI
  2. 对您的应用的代理请求。
  3. 要使用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,这将限制您对代理解决方案的选择。

答案 2 :(得分:3)

如果你使用Plack + Apache / mod_perl

,Apache配置看起来像这样
<Location /path/myapp>
  SetHandler perl-script
  PerlResponseHandler Plack::Handler::Apache2
  PerlSetVar psgi_app /path/to/my.psgi
</Location>