Windows 認証のみで保護されている OData サービスへの接続をテストするために、C# アプリに機能を追加しようとしています。次のコード ブロックは、このテストを実行するために使用しているものです。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(SERVICE_NAME));
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri(SERVICE_NAME), "Negotiate", new NetworkCredential(user, password));
resolver.Credentials = myCache;
// Do a simple request
request.Credentials = myCache;
request.PreAuthenticate = true;
request.KeepAlive = true;
request.AllowAutoRedirect = true;
request.CookieContainer = new CookieContainer();
object response = request.GetResponse(); // This is where the exception is thrown
上記のコードを実行すると、前述の 401 - Unauthorized エラーが表示されます。ただし、Fiddler2 を実行すると、コードは正常に動作します。そのため、代わりに Wireshark を使用しています。さらに、このサービスは私のブラウザー (Chrome) 内で完璧に動作し、Wireshark を使用して認証の HTTP 要求/応答を比較すると、Chrome では次の点を除いてほぼ同じであることがわかります: Accept、User-Agent 、Accept-Encoding、および Accept-Language ヘッダーがありますが、私の C# アプリにはこれらがありません。その他の唯一の違いは、私の C# アプリでは NTLM ヘッダーに "Negotiate Seal" フラグが設定されているのに対し、Chrome ではこのフラグが設定されていないことです。
これらの違いにもかかわらず、サービスが 302 - リダイレクトを返すまで、認証フェーズは C# アプリで正常に機能しているようです。この時点で、アプリは新しくリダイレクトされた URI で GET を試行し、401 を再度返します (Chrome が類似の GET を実行すると、HTTP 200 を受信します - OK で、順調に進みます)。
それで、これを引き起こす可能性のあるアイデアはありますか?サービスに問題がありますか?または私のコード?
どうもありがとう!-エリック