2013年11月5日火曜日

External Captive Portal

コントローラベースで外部 Captive を行う場合、
一般的には外部 CP サーバから XML-API user_authenticate または user_add
でコントローラに認証要求または認証成功(role change)を通知します。

CP Guest を外部 CP サーバとして使用する場合は異なり、添付画像のようなシーケンスとなります。
具体的には認証(pre-auth)成功時に 200 OK レスポンスで以下のようなコンテンツを
端末に返却し、端末のブラウザが javascript を実行することでユーザ名・パスワードを
コントローラに自動的に POST するようになっています。
シーケンスで "Automated NAS login" と書かれているところです。

ControllerとCP間ではRADIUSベースで認証が行われています。
もともと、外部認証を内部のControllerが行っていて、それを外部のシーケンスを増やしたと考えると分かりやすい。

www.yahoo.comと入力すると、DNSでControllerのIPを返答し、インターセプトされます。
外部ポータルが設定されている場合は、Controllerでクライアントに以下のようなURLへリダイレクトするようにHTTP のRequest HeaderのLocationに入れて、クライアントに外部ポータルへアクセスさせます。

クライアントは以下のURLでアクセスするので、引数の?以下がxxx.phpのURLに渡されます。
ポータル側では?以下の引数を利用して、返答のパターンを設定が可能です。
ポータル側では、最終的にはUsername/Passwordを入力・送信することになりますが、このときArubaとの連携では、以下のHTMLとJavascriptを受け取ったFormに基づいて、返答します。
イメージはWebでPostされてきた内容をクライアントにそのまま、返答します。

クライアントは気がつかないうちに、以下のURLにFormをポストしています。
https://securelogin.arubanetworks.com/cgi-bin/login
securelogin.arubanetworks.comはDNSの名前解決はインターセプトされ、ControllerのIPが返答されます。また、securelogin.arubanetworks.comに以下のメッセージが返答されると、それをControllerでHTTPからRADIUS Requestに変換し、設定されているRADIUSに送信します。
外部ポータルの認証でRADIUSを使わない場合は、XML APIを利用して制御する必要があります。

------
<p>
ログインしています。お待ちください...
</p>
<form name="weblogin_form" method="POST" action="http://securelogin.arubanetworks.com/cgi-bin/login" target="_top">
                <input type="hidden" name="user" value="guest@k2hiro.com">
                <input type="hidden" name="password" value="57396779">
                <input type="hidden" name="cmd" value="authenticate">
                <input type="hidden" name="mac" value="3c:a9:f4:0c:d9:44">
                <input type="hidden" name="UIP" value="10.215.200.207">
                <input type="hidden" name="ip" value="10.215.200.12">
                <input type="hidden" name="essid" value="ssk-psk">
                <input type="hidden" name="apname" value="ap105">
                <input type="hidden" name="apgroup" value="default">
                <input type="hidden" name="url" value="http://www.google.co.jp/">
                <input type="hidden" name="Login" value="Log In"> </form> <script language="JavaScript" type="text/javascript"><!--
document.weblogin_form.submit();             ★←このスクリプトが実行されると、username/pass をポストする
// -->
</script>

------

0 件のコメント:

コメントを投稿