Как получить аргумент при отправке POST на URL с помощью Perl (Mojolicious)

Я настраиваю двухфакторную аутентификацию duo в веб-приложении perl (используя mojolicious). Я новичок в Perl, так что это может быть простой ответ.

У меня все настроено, за исключением того, что мне нужно проверить ответ, выполнив следующие действия: «После того, как пользователь аутентифицируется (например, с помощью телефонного звонка, SMS-пароля и т. д.), 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)

Веб-сайт Duo: https://duo.com/docs/duoweb


person NF1    schedule 04.02.2017    source источник


Ответы (1)


Похоже, что это sig_response — это просто значение, которое отправляется в ваш обработчик ответов. Когда вы создали URL-адрес для отображения в iframe, он имел параметр post_action. Это конечная точка в вашем приложении, которая обрабатывает пользователя, возвращающегося из iframe.

Для этого вам нужно построить маршрут в Mojo. Там вам нужно посмотреть параметры, которые вы получаете в теле POST. Я не знаю, это данные формы или что-то еще, например JSON. Это действительно не говорит в документации. Я предлагаю вам сбросить параметры, а если это не показывает, сбросить все тело запроса.

Получив этот параметр sig_response, вам нужно вызвать функцию verify_response, которую предоставляет библиотека duo, и посмотрите на возвращаемое значение.

Если вы еще этого не сделали, скачайте SDK по адресу https://github.com/duosecurity/duo_perl. Это не полный дистрибутив. Вы можете либо клонировать все это, либо просто загрузить файл pm с их github и поместить его в каталог 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.

person simbabque    schedule 04.02.2017
comment
Существует также модуль metacpan.org/pod/Net::Duo на CPAN, который связаны, но это не официально. Я не знаю, что он делает, так как совсем не знаком с duo. - person simbabque; 04.02.2017