2013-06-10 8 views
7

私はAsp.net Web APIを使用してWebサービスを構築しており、AXIS IPカメラから画像を取得する必要があります。ただし、カメラではダイジェスト認証が使用されます。だから、私のC#のコードは次のようになります。.NET WebClientが認証なしで要求を最初に送信する

  WebClient webClient = new WebClient(); 
      webClient.UseDefaultCredentials = true; 
      webClient.Credentials = new NetworkCredential("***", "***"); 
      byte[] imageStream = webClient.DownloadData("http://192.168.0.90/axis-cgi/jpg/image.cgi"); 

このすべての作品を、しかしフィドラーを見たとき、私は、クライアントが認証なしで一つのリクエスト、および401のエラーリターンを送ることがわかりました。その後、ダイジェストセキュリティ付きのものを送信します。

私はここで、マニュアルの資格情報を注入して解決策を見つけました:

http://kristofmattei.be/2013/02/20/webclient-not-sending-credentials-heres-why/

しかし、これは間違って見えます。それは基本的な認証を使用しています。私はそれが本当に欲しくなく、プロフェッショナルではないようです。

署名されたリクエストをすぐに送信する方法はありますか、それとも最初のリクエストでカメラがノンスを返すことに気付いているので、これはどのように動作しますか?

+0

あなたは[HTTPS&ダイジェスト認証](http://stackoverflow.com/a/1970990/580951)を試しましたか? – Romoku

+0

リンクは似ていますが、デフォルトの認証情報を使用して明示的な資格情報を設定するように指示していると思いますそれを最初にfalseに設定してから、それが動作するかどうかを確認してください。 – Bearcat9425

+0

両方のアドバイスの後に変更はありません。 –

答えて

7

Webクライアントが がthat questionを見るなど、スキームが使用されている認証を把握するために、彼はなってきた401応答に基づいて、それは基本的なことができ、ダイジェスト持っているので、あなたが最初に匿名の要求を回避することはできません。

ダイジェストでは、最初の401応答にnonce(クライアント認証要求に必要な値)が含まれているため、2つの要求を避けることはできません。Digest access authentication, Wikipediaを参照してください。

基本認証の場合は、資格情報で必要なヘッダーを手動で設定することで、最初の要求を回避することができました。

+0

これは非常に役に立ちました。実際、基本認証の場合、WebClientは最初の要求で資格情報を送信しません。これを行う前に、WebClientは401を待機します。したがって、サーバーが準拠していない場合(たとえば、いくつかのmailgun APIの場合のように、401ではなく407が返されます)、決して資格情報を送信しません。ブー!これを修正する方法は、あなたが提案したようにAuthorizationヘッダーを手動で設定することです - http://stackoverflow.com/a/9699211/118878ありがとう! – DenNukem

関連する問題