- PR -

基本認証ダイアログを無効にするには?

1
投稿者投稿内容
KYT
会議室デビュー日: 2006/05/31
投稿数: 3
投稿日時: 2006-05-31 21:08
お疲れ様です。

基本認証について質問です。

Aというフォルダを作成し、IISの設定で基本認証にしているのですが、
Aフォルダの中にあるBファイルにアクセスする時、基本認証を行う時と行わない時の二通りに分けたいと考えています。

基本認証を行う条件としては、Aフォルダの中にあるBファイルのアドレスを直接入力してBファイル開こうとした場合です。
また、基本認証を行わない条件は、ページのボタンからResponse.Redirect()を利用してBファイルを開こうとした場合です。

現在記述しているコードは以下の通りです。

Private Sub Button1_Click(ByVal sender As System.Object _
, ByVal e As System.EventArgs) Handles Button1.Click
Response.AddHeader("Authorization", "Basic [Base64で変換されたIDとパスワード]"
Response.Redirect("test.xls")
End Sub

Response.AddHeader()を記述したのは、送信ヘッダーに

『Authorization: Basic ID:Password(Base64で変換されている)』

と記入すると基本認証ダイアログが表示されずにページにアクセスできると書かれていたためです。

たぶん、まったく見当違いのことをしているのかもしれません。

IISでの設定を無視して基本認証ダイアログさえ出ないようになれば良いのですが、他に方法を見つけられませんでした。

ご教授のほど宜しくお願いいたします。

[ メッセージ編集済み 編集者: KYT 編集日時 2006-05-31 21:09 ]
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-05-31 23:03
RedirectはブラウザにHTTPステータス302を返します。
HTTPステータス302を受け取ったブラウザは、ページが移動されたと認識しtest.xlsにリクエストを投げるわけです。
KYTさんのコードはサーバーがHTTPステータス302をブラウザに返す時にBasic認証のヘッダを付加しているにすぎません。
本来ならば、ブラウザがtest.xlsにリクエストを投げる際にBasic認証のヘッダを付加する必要があります。

http://www.atmarkit.co.jp/fdotnet/aspnet/aspnet16/aspnet16_01.html
KYT
会議室デビュー日: 2006/05/31
投稿数: 3
投稿日時: 2006-06-01 11:59
burton999さん、返信ありがとうございます。

>本来ならば、ブラウザがtest.xlsにリクエストを投げる際にBasic認証のヘッダを付加する必要があります。

この内容についてですが、ブラウザにリクエストを投げる際にコード上で処理を記述することが可能なのでしょうか?

Response.AddHeaderがダメなら、Request.Headersに書いたらいいのかな?と安直に考えたのですが、案の定、ReadOnlyになっていたため上書きは不可能でした。
そもそも、ヘッダにAuthorizationが設定されていたら、上書きはできないらしいですが・・・。

Global.asaxのApplication_BeginRequest()メソッドを利用するのかとも考えたのですが、それも何か違うような気がします。

リクエストを投げるところというのは、どのコードにあたるのでしょうか?
また見当違いのことを質問しているかと思いますが、宜しくお願いします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-06-01 12:29
サーバーサイドでブラウザが投げるリクエストヘッダを操作することはできないと思います。(ISAPIなら可能かも)
思いつく方法としては、サーバーサイド(Button1_Click)でHttpWebRequestを使用して、サーバーがtest.xlsを取得します。
この際、Basic認証のヘッダを付加します。
HttpWebRequestのレスポンスはStreamで取得可能なので、その内容をブラウザのレスポンスに書き込みます。
この場合、ブラウザはtest.xlsにリクエストを投げていないので、ブラウザのURL欄はtest.xlsになりません。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-06-01 12:53
拡張子XLSにASP.NETエンジンをマッピングすると、global.aspxかIHttpModuleで制御可能かも。
http://www.atmarkit.co.jp/fdotnet/dotnettips/114iisrelate/iisrelate.html
KYT
会議室デビュー日: 2006/05/31
投稿数: 3
投稿日時: 2006-06-01 19:18
お疲れ様です。返信が遅くなってしまい申し訳ありません。

burton999さん、todoさん、返信ありがとうございます。

burton999さんの提案なのですが、Streamをレスポンスに書き込む場合、そのファイル形式によってResponse.ContentTypeを指定しなければならないと思います。
しかし、今回はファイル形式が特定できないため、ContentTypeの指定が困難です。
ファイル形式からContentTypeを取得できるような便利な関数が無いか調べてみようと思います。

todoさんの提案である拡張子xlsにASP.NETエンジンをマッピングも試したのですが、現在思うような結果が得られていません。
IEにキャッシュされてしまうと、そのキャッシュを見に行くようで、ASP.NETエンジンの対象外になるみたいです。

なかなか難しいものですね^^;

現在行っているプロジェクトでどうしても必要な処理なので、もう少しあがいてみようと思います。

色々とご教授ありがとうございました。

また何か関連するようなことが見つかれば、こちらのほうにレスしてもらえると嬉しいです。

[ メッセージ編集済み 編集者: KYT 編集日時 2006-06-01 19:20 ]
1

スキルアップ/キャリアアップ(JOB@IT)