2

SV-RES と呼ばれる別の IIS7 サーバーに対して、SV-REQ と呼ばれるサーバー上の ASP.Net ページから HttpWebRequest を作成しようとしています。Digest、Basic、または Negotiate を使用するように SV-RES で IIS を設定し、適切なメソッドを使用するように資格情報キャッシュ オブジェクトを変更すると、コードは正常に実行され、SV-RES から有効な応答が返され、ユーザーの資格情報が正しいことを確認します。は正しい。ただし、SV-RES で「Windows 認証」を使用するように IIS を設定すると、資格情報キャッシュ オブジェクトで NTLM を使用すると 401 エラーが返されます。

私は本当に途方に暮れており、誰かがこれを機能させる方法についての情報を持っていれば幸いです。

注: このコードが実行されているサーバーは、HTTP 経由の匿名認証で実行されています。以下のコードに示すように、要求を受け取るサーバーは、HTTPS 経由の NTLM (前述のとおり) です。

これは実行中の SV-REQ のコードです。SV-REQ は IIS7 で、ASP.Net 2.0 用に構成されています

Dim credCache As CredentialCache = New CredentialCache()
Dim mUri As Uri = New Uri("https://sv-res.my-domain-here.com/default.htm")
Dim mreq As HttpWebRequest = WebRequest.Create(mUri.ToString)
credCache.Add(mUri, "NTLM", New NetworkCredential(muser, mpass, mdomain))
mreq.Credentials = credCache
Dim mres As HttpWebResponse = mreq.GetResponse

上記のコードの SV-RES から返されるエラーを次に示します。SV-RES も ASP.Net 2.0 用に構成された IIS7 です。

リモート サーバーがエラーを返しました: (401) 権限がありません。
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Net.WebException: リモート サーバーがエラーを返しました: (401) 権限がありません。

ソース エラー:


31 行目: credCache.Add(mUri, "NTLM", New NetworkCredential(muser, mpass, mdomain))
行 32: mreq.Credentials = credCache
33 行目: Dim mres As HttpWebResponse = mreq.GetResponse
34 行目: Dim sr As StreamReader = New StreamReader(mres.GetResponseStream())
35 行目: txtResult.Text = sr.ReadToEnd()



ソース ファイル: C:\inetpub\httproot\contentscan.aspx.vb 行: 33

スタックトレース:


[WebException: リモート サーバーがエラーを返しました: (401) Unauthorized.]
   System.Net.HttpWebRequest.GetResponse() +1126
   C:\inetpub\httproot\contentscan.aspx.vb:33 の contentscan.Page_Load(オブジェクト送信者、EventArgs e)
   System.Web.UI.Control.OnLoad(EventArgs e) +132
   System.Web.UI.Control.LoadRecursive() +66
   System.Web.UI.Page.ProcessRequestMain (ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +2428
4

1 に答える 1

4

かなりの調査の結果、ここで問題が見つかりました。あまり話題にならないセキュリティアップデートに関連しているようですので、自分のサイトに投稿しました:http ://www.tinyint.com/index.php/2009 / 08/24 / 401-error-on-httpwebrequest-with-ntlm-authentication /

ただし、セキュリティ更新プログラムはSMBの脆弱性にパッチを適用し、その一部には、認証要求を実行する際のホスト名のループバックチェックが含まれます。このループバックチェックを有効のままにした場合、適切に認証できるようにするには、レジストリにホスト名を入力する必要があります。

于 2009-08-25T00:17:54.630 に答える