サーバー2008にWebアプリケーションを展開していますIIS 7.5ボックス。
リモートからこのエラーが発生します:401 - Unauthorized: Access is denied due to invalid credentials
。 (リモート=同じLAN上のデスクトップ)
異なるブラウザを使用して複数のリモートクライアントを試したが、すべて同じ結果になった。 (IE、FF、Chrome)
サーバー自体のデスクトップからアプリケーションを押すと、問題なく動作します。ただし、サーバーデスクトップでFirebugを試したことはありません。私はそれがまだ401ステータスコードを発行しているにもかかわらず、とにかくコンテンツを返していると思います。アップデート#2を参照してください。
アプリケーションは匿名認証を使用しています。
アプリケーションは、MVCフレームワークを使用して.NET 4.0 Asp.Netで記述されています。
静的コンテンツは正常に機能します。例: http://server.com/content/image.jpg
Sysinternals procmon
は、リクエストごとに次の2つの結果を返します:FAST IO DISALLOWEDおよびPATH NOT FOUND。
同じサーバーで他の2つのMVCアプリが正常に動作しています。フォルダのセキュリティを確認しましたが、すべて一致しています。
アプリはサーバー2008で正常に動作しますIIS 7.0ボックス。
これに関連するサーバーのイベントログには何も表示されません。
私の髪をここから引き出します、トラブルシューティングのヒントはありますか?
UPDATE#1:これは、私が掘るにつれて、より多くのWTFを取得します。
IISマネージャ->エラーページ->機能設定の編集]でアプリケーションをクリックすると、Detailed Errors
、アプリはリモートで動作します。これをオンにしたままにしないと、問題はまだ解決されず、さらに混乱します。
UPDATE#2:Firebugを使用すると、ステータスが401 Unauthorized
、ただしResponseはアプリケーションの正しいHTMLを返しています。
UPDATE#3失敗した要求トレースで遊んでいます。401の原因となっている警告要求トレースは次のとおりです。
ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 401
HttpReason Unauthorized
HttpSubStatus 0
ErrorCode 0
ConfigExceptionInfo
Notification EXECUTE_REQUEST_HANDLER
ErrorCode The operation completed successfully. (0x0)
アップデート#4レギュラーIISログはこれを示しています:
#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2010-07-20 19:17:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2010-07-20 19:17:22 10.10.1.10 GET /Purchasing/Home - 80 - 10.10.1.12 Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.6)+Gecko/20100625+Firefox/3.6.6 401 0 0 4414
時々一歩戻る必要があります...これの原因は、_[Authorize]
_属性でマークされたアクションメソッドを呼び出すHtml.RenderAction()
が私のビューにあったことです。
ローカルでは機能しますがリモートでは機能しないため、匿名ユーザーアカウントは何かにアクセスできないようですが、Windowsユーザーはアクセスできるようです。これを証明するには、WebサイトのWindows認証をオフにして、ローカルで破損するかどうかを確認します。
破損しているものは、アプリプールIDではなくWebサイトIDとして実行されている可能性があります。そうでない場合、ローカルおよびリモートで破損します。サイトとアプリプールのマッピングが1対1である場合、または信頼性の高い環境がある場合、アプリプールIDを使用するように匿名ユーザーアカウントを設定することをお勧めします。そうすれば、2人目のユーザーが保守することを心配する必要はありません。
プロセスエクスプローラについて説明しました。これは実行中の情報を見つけるのに適していますが、アクセス拒否エラーを発見する可能性が高いツールは(同じくsysinternalsから)processmonです。試して、再現してキャプチャしてから、「拒否されました」という単語を検索してください。ディスク上でアクセス拒否の問題が発生するはずです。
何らかの理由でこれで問題が解決しました。
AuthorizeAttribute
から継承するカスタム認証のフィルターと、OnAuthorization
methodへの1つ以上の呼び出しがあり、そのうちの1つがAuthorizationContext.Result
を `HttpUnauthorizedResultに設定する場合も、これと同じ動作になります。 」
認可ルールの設定を確認しましたか?誰かがこのページにアクセスできる場合(これが目標のようです)、ユーザー列に「すべてのユーザー」がある「許可」ルールがあることを確認してください。
次に、「認証」で競合がないことを確認し、匿名認証のみを有効にします。
お役に立てば幸いです。