Webbrowserと認証画面について

タグの編集
投稿者 acwg  (社会人) 投稿日時 2012/7/17 18:41:01
いつもお世話になっております。

WinXP SP3 + VB2010(Windowsフォームアプリケーション) で開発しています。

フォームにWebbrowser、スプレッドシート(グレープシティ社製)を貼り付けて、Webbrowserには社内イントラシステム、スプレッドシートにはDBに保存されているデータを表示しています。

画面構成の意図は、ユーザーがDBの保存値を見ながらイントラシステムに入力するのですが、IEとVBで作ったアプリを2個起動したくない。一つのウィンドウで処理したいとの要望からこういった設計になっています。

----ここからが質問です。----
このイントラは、Windows認証(呼び名がちがってたらすいません…。ログインID+パスワードを聞いてくるダイアログです。)が入り口で出てくるタイプなのですが、Webbrowserで、このページを表示すると、入り口以外の部分でも認証画面が表示されてしまいます。
(IEでこのページをアクセスしている時は、入り口でしか認証画面が出ません。)
で、認証画面が出るタイミングなのですが、子画面が開かれるような作りの部分で認証画面で出ている感じです。
また、関係するか微妙ですが、本VBアプリとは別にIEでこのイントラを開いて、認証をすませておくと、Webbrowserで見ているVBアプリ側も、認証画面が出るのは入り口のみ(IEと一緒)になるようです。

このことから自分の感覚で感じたのは、Webbrowserで表示している際は、都度認証が切れてしまっていて、再認証が求められているような感覚がします。

Webbrowser側に設定もしくは、なにか処理を組み込むことで、この現象は回避可能なものなのでしょうか?

うまい言葉がみつらなくて、事象が伝わりづらい部分もあるかとは思いますが、みなさま、どうぞ宜しくお願い致します。
投稿者 るきお  (社会人) 投稿日時 2012/7/18 13:23:41
>子画面が開かれるような作りの部分で認証画面で出ている感じです。
このときWindowsフォーム版はどのような動きになっているのでしょうか?

サーバー側の設定にもよりますが、ユーザーエージェント(IEなど)のプロセスが切り替わった場合認証情報は継続できないことが多いです。

複数のブラウザのウィンドウを立ち上げている場合、どのウィンドウとどのウィンドウが同じプロセスになっているかは一見したところわからないですが、あるウィンドウで認証を済ませてそのウィンドウを開いたままにして別のウィンドウを操作する場合、そのウィンドウが同じプロセスで動いていれば認証が不要で、違うプロセスで動いていれば再度認証を要求されます。

>このイントラは、Windows認証(呼び名がちがってたらすいません…。ログインID+パスワードを聞いてくるダイアログです。)
おそらく基本認証ですね。

認証の設定はIIS側と.NET側の2箇所にあり、カスタムな実装がされている場合もあるので一概には言えませんが、現在出ている情報からは上記のようにプロセスが変わっている可能性があるかなと思い、冒頭に書いた動きがわかればもうちょっと見えてくるかなと思いました。
投稿者 ズッカ  (社会人) 投稿日時 2012/7/18 15:22:18
例えば、FormにWebBrowserを貼り付けただけのアプリを作り、これで社内イントラにアクセスした場合も、
入り口以外のページでも認証画面が表示されますか?
また、社内イントラをWebBrowserで表示させた時、画面遷移は同じWebBrowser内で行われていますか?

ちょっと気になるのは、以前のWebBrowserについての質問に、IME言語バーの表示がおかしくなると
いうものがありましたが、何か別の要因がありそうな気がします。

http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=10947
投稿者 acwg  (社会人) 投稿日時 2012/7/18 18:35:32
るきおさん、スッカさん返信ありがとうございます。

るきおさん>
>子画面が開かれるような作りの部分で認証画面で出ている感じです。
>このときWindowsフォーム版はどのような動きになっているのでしょうか?
こちらは、認証画面が出てきて、IDとパスワードを入力して、OKボタンを押下すると子画面が出る感じです。(これらは、VB側では何もロジックは書いていなくて、イントラを表示しているのみです。)
※これで聞かれていることへの回答になってますでしょうか?自分が勘違いしてたら、言って下さい。

スッカさん>
画面遷移に関しましては、Webbrowserで表示させた際も、IEで表示させた際も、基本同じです。
一点だけ、Webbrowserで表示している時だけ、認証画面が表示されるタイミングが多いというのがちがいになります。また、本質問を投稿する前に、一応確認事項として、単純に空のVB新規プロジェクトを作成して、フォームにWebbrowserを貼り付けただけの状態で社内イントラ表示を試してみたのですが、やはり子画面などを呼び出す際に、認証画面が表示されてしまいます。

ちなみに、前回私が投稿したIME表示がおかしくなる件ですが、こちらは、フォームを閉じる際に、WebbrowserをDisposeしていなかったのが原因だったようで、Disposeを追加したら、症状は出なくなりました。

みなさん、お忙しい中、コメントありがとうございます。引き続き宜しくお願い致します。
投稿者 るきお  (社会人) 投稿日時 2012/7/19 13:09:22
>子画面が出る
acwgさんが「子画面」と表現しているものがいったいどういうものなのかが知りたかったことです。その子画面は、acwgさんが作ったVBのプログラムの中ではなく、外部に別ウィンドウとして表示されているでしょうか?
このタイミングでプロセスが切り替わって認証情報の受け渡しができなくなっている可能性があると思います。

詳細はもっと調べないとわからないのですが、プロセスが切り替わっていると仮定した場合の対応はクライアント側では非常に困難で、サーバー側に対応してもらうことになります。

サーバー側での対応はacwgさんは想定していないと思いますが、もっとも簡単な方法はIISの認証設定で匿名アクセスを可能にすることです。この場合はセキュリティ・機能の両面で検討が必要です。
投稿者 acwg  (社会人) 投稿日時 2012/7/19 15:49:52
るきおさん>
自分が「子画面」という言葉を使っているものは、インターネットなどで調べるかぎり「サブウィンドウ」と呼ばれているようです。

http://www.tagindex.com/javascript/window/open1.html

いろいろ探して見つけたのですが、こちらのURLにある「サブウィンドウ1」というリンクをクリックした時に表示されるものを「子画面」といういいかたをしていました。
ただ、ちょっと気になるのは、「ページが表示されました」や「インターネット」と出てるフレーム的な部分が、社内イントラネットのサブウィンドウにはないのです。このへんは作り方の差異で生じるものなんでしょうか…。

一番厳しいのは、イントラネット自体の中の作りが見えないので、目に見える表面上の部分で判断するしかない状態なのですが、現状、手持ちの情報はこんな感じです。

この後も調査継続しますので、みなさん、何かお気づきの点ありましたら、宜しくお願いします。
投稿者 ズッカ  (社会人) 投稿日時 2012/7/19 17:13:13
おそらく、acwgさんが「子画面」と呼ばれているのは、IEの画面であって、VBのWinForm側の画面ではない
(WebBrowser上に表示されているわけではない)のだと思いますので、IEでイントラに接続されていない状態で
IEの子画面を開く場合には、WebBrowserとIEは別物と判断し、認証が必要となっているのかも知れません。

そうなると、やっぱりVBとIEを両方使うか、IEで開かれる子画面をVB側のForm上に開くようにするか、ということになりそうです。
投稿者 (削除されました)  () 投稿日時 2012/7/21 17:48:02
(削除されました)