- PR -

Webプロジェクト'hoge'を開けません。・・・・・・

投稿者投稿内容
Undo_sam
常連さん
会議室デビュー日: 2003/03/11
投稿数: 20
投稿日時: 2004-06-03 12:32
VC#2003でASP.NET Webアプリケーションを開発しています。
ある要件を解決するために採用した方法に問題があるようで、困っております。
状況説明が長いですが、よろしくお願い致します。


要件

1.イントラネットからのアクセス時はトップページを表示
2.インターネットからのアクセス時はユーザ認証ページを表示

解決方法

1.[ASP.NET]構成ファイルのみでフォーム認証を実現するには?
 http://www.atmarkit.co.jp/fdotnet/dotnettips/135aspauth/aspauth.html

を参考にして、トップページのファイル(index.htm)にアクセスがあったときに
認証ページへ飛ばす。

2.認証ページのPage_Loadイベントで、アクセスした端末のIPアドレスを調べて、
  イントラネット内のアドレスだったら、IDとPassをあらかじめ入力させた状態で
  認証させ、トップページへ飛ばす。
  → 処理時間は一瞬なので、イントラネット内のユーザは認証画面を通過した
    とは思わないでしょう。

3.「2」で該当しないIPアドレス、つまりインターネットからの接続の場合は、
  認証ページでIDとPassを入力させる。

Web.configファイルの該当記述は以下参照

<authorization>
 <allow users="ユーザID" /> <!--「ユーザID」ユーザーならアクセス許可-->
 <deny users="*" /> <!--↑の認証ユーザー以外はアクセス不許可-->
</authorization>

という方法で実現しました。

ただ、トップページにアクセスしたタイミングではなく、トップページからリンクが
張られた、hoge.aspxに対してアクセスがあったタイミングで認証ページが表示され
ました。

トップページはフレームで3つに分割されているので、それぞれのフレームで
認証ページが表示されました。

これを解決するために、
[ASP.NET].htmlや.pdfファイルをフォーム認証やロギングの対象にするには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/114iisrelate/iisrelate.html

を参考にして、トップページ(index.htm)をマッピングしましたが状況変わらず。

仕方ないので、フレーム分割されていないダミーページ(index.html)もマッピングして
「サイトのプロパティ」の「ドキュメント」タブの「既定のドキュメント」で、
トップページ(index.htm)よりもダミーページ(index.html)を優先して表示させるように
したところ、認証ページは1つだけ表示されるようになりました。

ここまでやって何とかなったな、と思いましたが、次回 VC#.NET 起動時に、

Webプロジェクト'hoge'を開けません。ファイルパス'C:\\Inetpub\\wwwroot\\hoge'が
URL'http://10.10.10.27/hoge'と一致しません。これらは同じサーバーの場所に
割り当てる必要があります。

とエラーになりました。

結局、Web.configの上記の該当記述を

<authorization>
 <allow users="*" /> <!-- 全ユーザーへの許可 -->
</authorization>

にすると、このエラーは出ません。

開発時とリリース時で、Web.configの記述をいちいち書き換えるしかないのでしょうか。
または、この解決方法の中に、やってはいけない事柄が入っていますでしょうか。

よろしくお願い致します。

きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-06-03 12:52
Undoさん、こんにちは。

# 細かいところは見ていません。

引用:

開発時とリリース時で、Web.configの記述をいちいち書き換えるしかないのでしょうか。


configファイルを追加して、デバッグ時とリリース時で違うファイルを読み込むように出来ます。プロジェクトのプロパティダイアログで、構成毎にオーバーライドファイルを指定します。
Undo_sam
常連さん
会議室デビュー日: 2003/03/11
投稿数: 20
投稿日時: 2004-06-03 16:53
きくちゃん様
お返事ありがとうございます。

>プロジェクトのプロパティダイアログで、構成毎にオーバーライドファイルを指定します。

私にはプロパティダイアログには、オーバーライドファイルを指定する箇所を見つけられませんでした。
そこでデバッグ時用とリリース時用に2つの.configファイルを準備して、
以下のように、hoge.csproj内に~~~~~~~~線部のように記述しました。

<Config
Name = "Debug"
AllowUnsafeBlocks = "false"
BaseAddress = "285212672"
CheckForOverflowUnderflow = "false"
ConfigurationOverrideFile = "debug.config"
                   ~~~~~~~~~~
DefineConstants = "DEBUG;TRACE"
DocumentationFile = ""
DebugSymbols = "true"
FileAlignment = "4096"
IncrementalBuild = "false"
NoStdLib = "false"
NoWarn = ""
Optimize = "false"
OutputPath = "bin\"
RegisterForComInterop = "false"
RemoveIntegerChecks = "false"
TreatWarningsAsErrors = "false"
WarningLevel = "4"
/>
<Config
Name = "Release"
AllowUnsafeBlocks = "false"
BaseAddress = "285212672"
CheckForOverflowUnderflow = "false"
ConfigurationOverrideFile = "release.config"
                   ~~~~~~~~~~
DefineConstants = "TRACE"
DocumentationFile = ""
DebugSymbols = "false"
FileAlignment = "4096"
IncrementalBuild = "false"
NoStdLib = "false"
NoWarn = ""
Optimize = "true"
OutputPath = "bin\"
RegisterForComInterop = "false"
RemoveIntegerChecks = "false"
TreatWarningsAsErrors = "false"
WarningLevel = "4"
/>

このように設定しましたが、読み込まれていないようです。
読み込まれていないと判断した理由は、既存のWeb.configをリネームすると
ビルドできないからです。

エラーメッセージ

プロジェクトを実行しようとしているときにエラーが発生しました:Webサーバーで
デバッグを開始できません。プロジェクトはデバッグできるように設定されていません。

設定箇所は、ConfigurationOverrideFile ではないのでしょうか?

以上、よろしくお願い致します。


なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-06-03 17:25
引用:

Undoさんの書き込み (2004-06-03 12:32) より:
2.認証ページのPage_Loadイベントで、アクセスした端末のIPアドレスを調べて、
  イントラネット内のアドレスだったら、IDとPassをあらかじめ入力させた状態で
  認証させ、トップページへ飛ばす。


本題からずれますが、これはやや危険な気がしないでもないです。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-06-03 17:42
Undoさん、こんにちは。

引用:

私にはプロパティダイアログには、オーバーライドファイルを指定する箇所を見つけられませんでした。


済みません、VB.NETの話でした。申し訳ない。

引用:

設定箇所は、ConfigurationOverrideFile ではないのでしょうか?


はい、それで合ってます。
デバッグ用の方のファイル名を、標準の Web.config にしてみて下さい。
Undo_sam
常連さん
会議室デビュー日: 2003/03/11
投稿数: 20
投稿日時: 2004-06-04 09:28
なちゃ様、お返事ありがとうございます。

引用:

なちゃさんの書き込み (2004-06-03 17:25) より:
引用:

Undoさんの書き込み (2004-06-03 12:32) より:
2.認証ページのPage_Loadイベントで、アクセスした端末のIPアドレスを調べて、
  イントラネット内のアドレスだったら、IDとPassをあらかじめ入力させた状態で
  認証させ、トップページへ飛ばす。


本題からずれますが、これはやや危険な気がしないでもないです。



危険ですか・・・・。
「送信元IPアドレスを偽装した場合に、認証を通過してしまう」
という意味でしょうか。

申し忘れておりましたが、このサイトにインターネット網から接続できる外部端末は
限られておりまして、そこのプロキシサーバのIPアドレスでアクセス制限をかけて
いますので、完全に解放しているわけではないのです。

他の危険性でしょうか?

オーバーヘッドが大きくなるとか・・・?
接続する人数も最大で200人程度です。

気付いていない危険性があるかもしれませんので、是非教えていただけないでしょうか。

よろしくお願い致します。

なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-06-04 09:48
引用:

Undoさんの書き込み (2004-06-04 09:28) より:
「送信元IPアドレスを偽装した場合に、認証を通過してしまう」
という意味でしょうか。

申し忘れておりましたが、このサイトにインターネット網から接続できる外部端末は
限られておりまして、そこのプロキシサーバのIPアドレスでアクセス制限をかけて
いますので、完全に解放しているわけではないのです。


あぁ、すみません、この辺のことを考慮されたうえでならいいと思います。
その辺のことがちょっと気になっただけでした。m(_ _)m
Undo_sam
常連さん
会議室デビュー日: 2003/03/11
投稿数: 20
投稿日時: 2004-06-04 10:17
きくちゃん様
お返事ありがとうございます。


引用:


はい、それで合ってます。
デバッグ用の方のファイル名を、標準の Web.config にしてみて下さい。




↑の方法でやりました。

ビルドはできるようになりました。

ただ、リリース時もデバッグ時に指定している"Web.config"ファイルを
読んでしまうようです。

試しに、"hoge.csproj"ファイル内で、

<Config
Name = "Release"
AllowUnsafeBlocks = "false"
BaseAddress = "285212672"
CheckForOverflowUnderflow = "false"
ConfigurationOverrideFile = "release.config"
                ~~~~~~~~~

"Web.config"ファイル内(デバッグ時に指定している.configファイル)で

<authorization>
 <deny users="*" />
</authorization>

と書いて"Release"でビルドすると、誰もアクセスできません。
つまり"release.config"ファイルではなく、"Web.config"ファイルを
読み込んでいると考えられます。

ConfigurationOverrideFile で設定した.configファイルを読み込むために
別のフラグがあるのでしょうか?

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