0

OAuth 1.0を使用して、Webサービスへの呼び出しを認証しようとしています。これは私のC#コードです。

OAuthBase oauth = new OAuthBase();
string normalizedUrl = String.Empty;
string normalizedqueryparameters = String.Empty;
string finalurl;
string sig;
var MerchantId = "xxxx-xxxx-xxxx-xxxx-xxxx";
var PublicKey = "xx";
var SecreteKey = "xxxxx";
var URL = new Uri("http://www.Server.com/DeveloperAPI/category/" + MerchantId + "/NA");
// token secret
sig = oauth.GenerateSignature(URL, PublicKey, SecreteKey, "", "", "POST", oauth.GenerateTimeStamp(), oauth.GenerateNonce(), out normalizedUrl, out normalizedqueryparameters);
finalurl = string.Format("{0}?{1}&oauth_signature={2}", normalizedUrl, normalizedqueryparameters, oauth.UrlEncode(sig));
string text = string.Empty;
using (var clinet = new HttpClient())
{
      clinet.DefaultRequestHeaders.Add("Accept", "application/Json");
      clinet.DefaultRequestHeaders.Add("Method", "POST");
      using (var response = await clinet.GetAsync(finalurl))
      {
           text = await response.Content.ReadAsStringAsync();
      }
}

ここからOAuthBaseクラスを取得しました。

http://code.google.com/p/oauth/issues/detail?id=223

Fiddlerを使用したRawhttpリクエストは次のとおりです。

GET http://www.server.com/DeveloperAPI/category/d8d63626-99d7-4aff-abe7-542ad705d083/CK00001277?oauth_consumer_key=Rxxxx7LO&oauth_nonce=65xxx982&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1345xxxx20&oauth_version=1.0&oauth_signature=PhUxxxxOh%2FzIxCo8A%2BQBNxxxxy7E%3D HTTP/1.1
Accept: application/Json
Method: POST
Host: www.xxxx.com
Proxy-Connection: Keep-Alive

HTTP呼び出しを正しく作成していますか?

4

2 に答える 2

1

うーん..本当に、最初に WireShark で HTTP リクエストを見てみたいと思います。たとえば、テストサーバーではいくつかのリダイレクトと追加の予備認証 Cookie (httpclient が保存する) を取得し、メインでは取得せず、その sig-generator を呼び出す前に最初にそれらを取得する必要がある可能性があります。 . トラフィックを見るのは非常に簡単で、違いがあなたの側にあるのか、相手の側にあるのかを確認できます。生のパケットを含むログファイルを提示すると、Web開発者はさらにおしゃべりになることがあります:)

于 2012-08-21T09:16:56.303 に答える
1

問題は、署名を作成するときに「POST」を渡すことですが、呼び出しは「GET」であるため、これで問題が解決します。

sig = oauth.GenerateSignature(URL, PublicKey, SecreteKey, "", "", "GET", oauth.GenerateTimeStamp(), oauth.GenerateNonce(), out normalizedUrl, out normalizedqueryparameters);
于 2012-08-21T10:14:10.077 に答える