Proxy.pacで利用者にプロキシ設定を配っているのだが、「人によってその設定を変えたい」という話。
例えば、ユーザAでログインした場合にはA-プロキシを使わせ、ユーザBだったらB-プロキシを使わせ…というのをどうしたらいいか。 いちいちログイン画面出して…つーのはNGだし、お金もかけたくないからアリモノだけでなんとかしたい。 もちろん、マトモな方法としては グループ・ポリシーでProxy設定を行うなどの方法が正解なのはわかってるのだが、ちょっと思いついたのが、Proxy.pac自体をロードする時にユーザIDに応じて差し替えちゃえばいいんじゃね?というアイディア。 既存のProxy.pac共有サーバは、利用者と同じドメインに入っているIISなので、とりあえずはそのまんまWindows認証を流用してみることにする。
URL: http://myserver/ProxyPac/ なぜ認証ありにするかというと、WindowsのログインユーザIDをキーに処理を振り分けるため。IEとFireFoxでは統合Windows認証(NTLM)の時にはパススルー(ダイアログ無し)でログインできるので、その機能を使う。本当はちゃんとweb.configを使う方がいいんだろうが、仮想ディレクトリのプロパティで設定。利用者は同じドメインのユーザなので、このディレクトリにはアクセスできる。 例えばこんな感じ(以下は例のための例)。ファイル名は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(); } } つーか、俺的には最終的にやりたいのは人+URLなどの諸条件によってダミーのプロクシに飛ばして…みたいなことなんで、得られたIDでADを引き直して、取得した条件でJavascriptを動的に書き換えて…的なことをやっている。 「インターネットオプション」→セキュリティ→ローカルイントラネットの「サイト」→詳細設定で、myserverを登録する。 これをやらないと、たぶんIEを立ち上げた都度、プロキシファイルを読み込むために認証ダイアログが出る。おそらく、起動したときにはプロキシ情報が読み込まれていないため、そのサーバがイントラなのかどうか判断が出来ないためだろう。 ちなみにFireFoxの場合、元々NTLMの自動ログインを有効にするためにはnetwork.automatic-ntlm-auth.trusted-urisにmyserverを登録する必要があり、その設定だけで大丈夫みたい。 試したのはIE8とFireFox3.5だけ(今回のターゲットがそれしかないんで) 挙動的にはよさげだが、保守運用がめんどくさいかなぁ。
by signal-9
| 2009-09-15 18:02
| TIPSとかKludgeとか
|
カテゴリ
全体 一般の話題 奇妙な論理 奇談・異聞 秋葉原 研究(笑) 町歩き 古い話 東電災害 電算機関係の話題 情報保護・セキュリティ 読んだり見たり TIPSとかKludgeとか 拙作ソフトウェア 未分類 最新の記事
記事ランキング
以前の記事
最新のトラックバック
その他のジャンル
ブログジャンル
画像一覧
| ||||||||||||||||||||
ファン申請 |
||