【问题标题】:How to get argument when POSTed to URL using Perl (Mojolicious)使用 Perl (Mojolicious) 发布到 URL 时如何获取参数
【发布时间】:2017-02-04 07:06:24
【问题描述】:

我正在一个 perl Web 应用程序中设置双重双重身份验证(使用 mojolicious)。我是 perl 新手,所以这可能是一个简单的答案。

除了需要通过执行以下操作来验证响应之外,我已经设置了所有内容: “在用户进行身份验证后(例如通过电话、短信密码等),IFRAME 将生成一个名为 sig_response 的签名响应并将其发布回 post_action URL。然后,您的服务器端代码应调用 verify_response() 来验证签名的响应是合法的。”

在perl中,如何调用sig_response,有模块吗?以下是使用 python 的示例: sig_response = self.get_argument("sig_response") # for example (if using Tornado: http://www.tornadoweb.org/en/stable/documentation.html)

双网:https://duo.com/docs/duoweb

【问题讨论】:

    标签: perl post iframe mojolicious two-factor-authentication


    【解决方案1】:

    看起来sig_response 只是一个发布到您的响应处理程序的值。当您创建要在 iframe 中显示的 URL 时,它有一个 post_action 参数。这是您应用程序中处理从 iframe 返回的用户的端点。

    为此,您需要在 Mojo 中构建一条路线。在那里,您需要查看您在 POST 正文中收到的参数。我不知道它是表单数据还是其他东西,比如 JSON。文档中并没有真正说明。我建议您转储参数,如果没有显示,请转储整个请求正文。

    获得sig_response 参数后,您需要调用二重奏库提供的the verify_response function 并查看返回值。

    如果您还没有完成,请通过https://github.com/duosecurity/duo_perl 获取 SDK。这不是一个完整的分布。您可以克隆整个内容,也可以从他们的 github 下载 pm 文件并将其放在应用程序的 lib 目录中。然后use 就像您使用任何其他模块一样。由于它不导出任何内容,因此您需要使用完全限定名称来调用verify_response 函数。

    整个事情可能看起来像这样未经测试的代码:

    post '/duo_handler' => sub {
        my $c = shift;
    
        my $sig_request = $c->param('sig_response');
        my $user = DuoWeb::verify_response($ikey, $skey, $akey, $sig_request);
        if ($user) { 
            # logged in
        } else {
            # not logged in
        }
    };
    

    免责声明:我不知道这项服务。我只是快速阅读了您链接的文档,并查看了他们的 Perl SDK,他们确实应该将其放在 CPAN 上。

    【讨论】:

    • CPAN 上还有一个模块metacpan.org/pod/Net::Duo 是相关的,但不是官方的。我不知道它是做什么的,因为我根本不熟悉 duo
    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 2016-11-10
    • 1970-01-01
    • 2011-12-11
    • 2012-01-18
    相关资源
    最近更新 更多