2013-06-10 8 views
7

Buduję serwis internetowy z interfejsem webowym Asp.net i muszę pobrać obraz z kamery IP AXIS. Aparat wykorzystuje jednak uwierzytelnianie Digest. Więc mój kod C# wygląda mniej więcej tak:.NET WebClient wysyła żądanie bez uwierzytelnienia najpierw

  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"); 

To wszystko działa, ale kiedy patrzy na Skrzypek, stwierdziliśmy, że klient wysyła jedno żądanie bez uwierzytelniania, a 401 zwraca błąd. Następnie wysyła wiadomość z szyfrowanym zabezpieczeniem.

Znalazłem rozwiązanie z ręczną poświadczeń zastrzyku tutaj:

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

Ale wygląda to źle. Wykorzystuje podstawowe uwierzytelnianie, którego naprawdę nie chcę i wygląda trochę nieprofesjonalnie.

Czy jest jakikolwiek sposób na natychmiastowe przesłanie podpisanego wniosku lub czy to działa, ponieważ zauważyłem, że kamera zwraca numer jednorazowy w pierwszym żądaniu?

+0

Czy próbowałeś [HTTPS i Digest Authentication] (http://stackoverflow.com/a/1970990/580951) – Romoku

+0

No tak, ten link jest podobny, myślę, że mówisz mu, aby używał domyślnych poświadczeń, a następnie ustawiając jawne poświadczenia , spróbuj najpierw ustawić na false, a następnie sprawdź, czy działa – Bearcat9425

+0

Bez zmian, po obu wskazówkach. –

Odpowiedz

7

nie można uniknąć pierwszy anonimowe żądania, ponieważ WebClient musi dowiedzieć się, który system uwierzytelniania jest używany, na podstawie odpowiedzi 401 on zaczyna, może to być podstawowy, strawić, etc ... Zobacz that question.

Przy pomocy digest nie można uniknąć 2 próśb, ponieważ pierwsza odpowiedź 401 zawiera wartość jednorazową (wartość potrzebną do żądania uwierzytelnienia klienta), patrz Digest access authentication, Wikipedia.

Jeśli było to uwierzytelnianie podstawowe, można było uniknąć pierwszego żądania, ustawiając ręcznie wymagany nagłówek za pomocą poświadczeń.

+0

To było bardzo pomocne. Rzeczywiście, dla podstawowego uwierzytelnienia WebClient nie wysyła poświadczeń na pierwsze żądanie, czeka na 401 zanim to zrobi. Dlatego jeśli twój serwer nie jest zgodny (np. Zwraca 407 zamiast 401, jak w przypadku niektórych API mailgunowych), nigdy nie wysyła poświadczeń. Gwizd! Aby to naprawić, ustaw nagłówek Authorization ręcznie, zgodnie z sugestią - http://stackoverflow.com/a/9699211/118878 Dzięki! – DenNukem

Powiązane problemy