内部 Web サービスでメソッドを呼び出していると、401 (アクセスが拒否されました) が発生します。社内イントラネットの ASP.NET ページから呼び出しています。すべての構成を確認しましたが、そのサービスにアクセスできるアカウントで統合セキュリティを使用する必要がありますが、どのアカウントで接続しているかを確認する方法を見つけようとしています。残念ながら、本番ネットワークでコードをデバッグすることはできません。私たちの開発環境では、すべてが正常に機能しています。設定に違いがあることはわかっていますが、どこから始めればよいのか途方に暮れています。推奨事項はありますか?
4 に答える
IIS ログを調べましたか?
運用サーバーは、開発環境とは異なるユーザーをアプリケーション プールに使用している可能性がありますか? 私はかつてそれを理解するのに一日を費やしました。別のオプションは、web.config での偽装 (の欠如) です。
Web サービスをインスタンス化するときに ASP.NET ページで使用する資格情報を指定しない場合、デフォルトでNT_Authority\Anonymousになると思います。
System.Net.CredentialCache を使用している場合、Web サービスは信頼できるドメインにあり、HTTPS 経由でアクセスし、NTLM、Kerberos、または Digest Auth のいずれかを使用する必要があります。そうしないと、キャッシュから資格情報が渡されません。
http://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultcredentials.aspx http://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultnetworkcredentials.aspx http://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultcredentials.aspx
また、サーバーのセキュリティ イベント ログで認証の失敗を確認することをお勧めします。失敗した認証試行の痕跡がここにあるはずです。ただし、注意してください。1 秒間に数十のセキュリティ イベントが発生することは珍しくありません。そのため、理想的には、リクエストが失敗したときにイベント ログにアクセスできる必要があります。