Proxy.pacをCGI(ASP.NET)でユーザ毎に切り替えてみるテスト。

 Proxy.pacで利用者にプロキシ設定を配っているのだが、「人によってその設定を変えたい」という話。
 例えば、ユーザAでログインした場合にはA-プロキシを使わせ、ユーザBだったらB-プロキシを使わせ…というのをどうしたらいいか。

 いちいちログイン画面出して…つーのはNGだし、お金もかけたくないからアリモノだけでなんとかしたい。

 もちろん、マトモな方法としては グループ・ポリシーでProxy設定を行うなどの方法が正解なのはわかってるのだが、ちょっと思いついたのが、Proxy.pac自体をロードする時にユーザIDに応じて差し替えちゃえばいいんじゃね?というアイディア。

 既存のProxy.pac共有サーバは、利用者と同じドメインに入っているIISなので、とりあえずはそのまんまWindows認証を流用してみることにする。

  1. IISに統合Windows認証ありの仮想ディレクトリ ProxyPac を作成する。

  2. URL: http://myserver/ProxyPac/
    なぜ認証ありにするかというと、WindowsのログインユーザIDをキーに処理を振り分けるため。IEとFireFoxでは統合Windows認証(NTLM)の時にはパススルー(ダイアログ無し)でログインできるので、その機能を使う。本当はちゃんとweb.configを使う方がいいんだろうが、仮想ディレクトリのプロパティで設定。利用者は同じドメインのユーザなので、このディレクトリにはアクセスできる。

  3. テスト用のスクリプトを用意。やることはProxy.PACファイルをMIMEタイプを付けてクライアント返すこと。

  4. 例えばこんな感じ(以下は例のための例)。ファイル名はProxyPac.aspxとする。

    protected void Page_Load(object sender, EventArgs e) {
    string uname;
    string filename;
    uname = HttpContext.Current.User.Identity.Name; // ドメイン名¥ユーザIDが返る
    if ( uname == "mydomain\\userID" ) { // ¥記号はエスケープね
    filename = MapPath("Special.pac"); // 特別なプロキシ設定ファイル
    } else {
    filename = MapPath("Normal.pac"); // 標準的なプロキシ設定ファイル
    }
    if(System.IO.File.Exists(filename)) {
    System.IO.FileInfo fileInfo = new System.IO.FileInfo(filename);
    long nSize = fileInfo.Length;
    Response.Clear();
    Response.ContentType = "application/x-ns-proxy-autoconfig"; // pacのMIMEタイプ
    Response.WriteFile(filename, 0, nSize);
    Response.End();
    }
    }
    ここではあらかじめ用意した別ファイルの設定ファイルを読み込んで返しているが、実際にはPAC単体のデバッグが終わったらASPXの中にハードコード(コピペ)しちゃう方が速度的に有利かも。
     つーか、俺的には最終的にやりたいのは人+URLなどの諸条件によってダミーのプロクシに飛ばして…みたいなことなんで、得られたIDでADを引き直して、取得した条件でJavascriptを動的に書き換えて…的なことをやっている。

  5. IEブラウザ側で、このサーバ(myserver)を明示的にイントラネットに属させる。

  6. 「インターネットオプション」→セキュリティ→ローカルイントラネットの「サイト」→詳細設定で、myserverを登録する。

     これをやらないと、たぶんIEを立ち上げた都度、プロキシファイルを読み込むために認証ダイアログが出る。おそらく、起動したときにはプロキシ情報が読み込まれていないため、そのサーバがイントラなのかどうか判断が出来ないためだろう。

     ちなみにFireFoxの場合、元々NTLMの自動ログインを有効にするためにはnetwork.automatic-ntlm-auth.trusted-urisにmyserverを登録する必要があり、その設定だけで大丈夫みたい。

  7. ブラウザ側で自動プロキシ設定URLを http://myserver/ProxyPac/ProxyPac.aspx に切り替えてテスト。

  8. 試したのはIE8とFireFox3.5だけ(今回のターゲットがそれしかないんで)

挙動的にはよさげだが、保守運用がめんどくさいかなぁ。
[PR]
by signal-9 | 2009-09-15 18:02 | TIPSとかKludgeとか | Comments(0)
<< ThunderBird 2.0... 今まで見た打ち上げの中で最も美... >>