2017-02-04 2 views
0

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

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

ответ

1

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

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

После того как у вас есть этот параметр sig_response, вам необходимо позвонить the verify_response function, чтобы библиотека 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 
    } 
}; 

Отказ от ответственности: Я не знаю эту услугу. Я только быстро прочитал документацию, которую вы связали, и посмотрел на их SDK Perl, которые они должны действительно поставить на CPAN.

+0

Существует также модуль https://metacpan.org/pod/Net::Duo на CPAN, который связан, но он не является официальным. Я не знаю, что он делает, поскольку я вообще не знаком с _duo_. – simbabque

Смежные вопросы