コントローラベースで外部 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が行っていて、それを外部のシーケンスを増やしたと考えると分かりやすい。
もともと、外部認証を内部の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 件のコメント:
コメントを投稿