2017-02-04 12 views
0

perl Webアプリケーション(mojoliciousを使用)でデュオ2要素認証を設定しています。私はperlには新しいので、これは簡単な答えかもしれません。 "ユーザーが認証した後(電話コール、SMSパスコードなどを介して)、IFRAMEはsig_responseとPOSTという署名付き応答を生成しますpost_action URLに戻ります。サーバサイドのコードは、verify_response()を呼び出して、署名されたレスポンスが合法であることを確認する必要があります。Perl(Mojolicious)を使用してURLにPOSTしたときに引数を取得する方法

perlでは、どのようにsig_responseを呼び出すことができますか、モジュールはありますか?それは、このsig_responseようになりますhttps://duo.com/docs/duoweb

答えて

1

はあなたの応答ハンドラにPOSTちょうど値である: sig_response = self.get_argument("sig_response") # for example (if using Tornado: http://www.tornadoweb.org/en/stable/documentation.html)

デュオウェブ:下記のパイソンを使用した例です。 iframeに表示するURLを作成したときは、post_actionというパラメータがありました。それはiframeから戻るユーザーを処理するアプリケーションのエンドポイントです。

モジョで経路を構築する必要があります。そこでは、POST本体で受け取っているパラメータを調べる必要があります。 JSONのようなフォームデータなのかどうかわかりません。それは実際にはドキュメントでは言いません。パラメータをダンプすることをお勧めします。それが表示されない場合は、リクエスト本文全体をダンプします。

sig_responseパラメータを取得したら、デュオのライブラリが提供するthe verify_response functionに電話して戻り値を確認する必要があります。

まだ行っていない場合は、SDKをhttps://github.com/duosecurity/duo_perlにしてください。完全な配布ではありません。全体をクローンするか、または自分の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 
    } 
}; 

免責事項:私は、このサービスを知りません。私はあなたがリンクしたドキュメントを素早く読んだだけで、彼らがCPANに本当に置くべきPerl SDKを見ました。

+0

モジュールhttps://metacpan.org/pod/Net::Duo on CPANも関連していますが、公式ではありません。私はそれが何をしているのか分かりません。 – simbabque

関連する問題