.NET HttpWebRequest oAuth 401 Nieautoryzowany

Muszę wykorzystać zasób internetowy z aplikacji VB.NET. Pomyślnie pobrałem token dostępu i jestem gotowy do użycia go do nawiązywania połączeń z chronionym zasobem. Jednak za każdym razem, gdy wywołam chroniony zasób, otrzymuję odpowiedź nieautoryzowaną 401, ponieważ pole autoryzacji nie zostało dodane do nagłówka.

Oto mój kod.

WebRequest = DirectCast(Net.WebRequest.Create(ApiUri), HttpWebRequest)
WebRequest.Method = "POST"
WebRequest.ContentType = "application/json"
WebRequest.ContentLength = Bytes.Length
Dim RequestStream As IO.Stream = WebRequest.GetRequestStream
RequestStream.Write(Bytes, 0, Bytes.Length)
RequestStream.Close()
WebRequest.Headers("Authorization") = "OAuth " & _
                                      "oauth_version=""1.0""," & _
                                      "oauth_nonce=""" & Nonce & """," & _
                                      "oauth_timestamp=""" & TimeStamp & """," & _
                                      "oauth_consumer_key=""" & ConsumerKey & """," & _
                                      "oauth_token=""" & Token & """," & _
                                      "oauth_signature_method=""HMAC-SHA1""," & _
                                      "oauth_signature=""" & Signature & """"
WebResponse = DirectCast(WebRequest.GetResponse(), HttpWebResponse)

Następnie monitoruję żądanie za pomocą Skrzypka. Wszystko, co widzę w Skrzypku, to prośba z odpowiedzią 401, jak pokazano poniżej (z wyłączeniem ciał).

Żądanie

POST ***url*** HTTP/1.0
Content-Type: application/json
Host: ***host***
Content-Length: 45
Connection: Keep-Alive

Odpowiedź

HTTP/1.0 401 Unauthorized
X-Powered-By: PHP/5.3.13
WWW-Authenticate: Basic realm="***realm***"
Content-type: application/json
Content-Length: 79
Connection: keep-alive
Date: Mon, 07 Jan 2013 01:13:22 GMT
Server: lighttpd/1.4.28

Wszędzie, gdzie przeczytałem w Internecie, wskazuje, że HttpWebRequest powinien najpierw rzucić wyzwanie serwerowi i otrzymać odpowiedź 401, jak widzę tutaj. Następnie należy spróbować ponownie z dodanym polem Autoryzacja do nagłówka i uzyskać odpowiedź 200 OK. Ta druga część się nie zdarza. Czy nie rozumiem, jak to działa poprawnie, czy też robię coś złego?

questionAnswers(1)

yourAnswerToTheQuestion