1

アプリケーションがローカルIISでHTTP要求を呼び出すと、ローカルサーバーで何が起こるかを次に示します。

    request.Credentials = CredentialCache.DefaultNetworkCredentials;
    request.PreAuthenticate = true;
    request.KeepAlive = true;

リクエストを実行すると、Fiddlerで次の一連のHTTP呼び出しを確認できます。

  1. 許可ヘッダーなしで要求すると、結果はWWWで401になります-NTLM+Negotiateを認証します
  2. 承認を伴うリクエスト:ネゴシエート(Base64文字列1)、結果はWWWで401になります-認証:ネゴシエート(Base64文字列2)
  3. 承認を伴うリクエスト:ネゴシエート(Base64文字列3)、結果はWWWで401になります-認証:ネゴシエート(Base64文字列4)
  4. 承認を伴う要求:ネゴシエート(Base64文字列3)、結果はWWWで401になります-NTLM+Negotiateを認証します

どうやらクライアントとサーバー(両方とも同じマシン上で実行されている)がハンドシェイクを試みていますが、最終的に認証は失敗します。

奇妙なことに、サイトのWindows認証を無効にし、基本認証を有効にして、user / pwdを明示的に送信すると、すべてが機能します。NTLM認証を使用して、資格情報を指定してブラウザーからサイトにアクセスしようとした場合にも機能します。

4

1 に答える 1

1

さて、数時間格闘した後、何が問題なのかを突き止めました。Fiddler でネットワーク トラフィックを検査できるようにするために、Fiddler ルールを定義しました。

if (oSession.HostnameIs("MYAPP")) { oSession.host = "127.0.0.1"; }

次に、Web アプリの参照で "localhost" の代わりに "MYAPP" を使用すると、Fiddler はすべてのセッション情報を問題なく表示しました。

しかし、サーバーのセキュリティはそれほど満足のいくものではなかったため、このエイリアスは基本的にローカル サーバーでのチャレンジ/レスポンス認証を破っていました。エイリアスを「localhost」に置き換えると、すべて機能しました。

于 2013-01-18T23:43:15.483 に答える