何が間違っているのかわかりませんが、それはおそらく、oauth を使用した最初のタンゴであり、どこかでそれを新規作成していると確信しているためです。私は現在、Google コードによってホストされ、oauth の Web サイト (http://oauth.googlecode.com/svn/code/csharp/) にリンクされている oauth ライブラリを使用しています。
次のコードでは、変数「YQL」は、クラスのスコープ内で次のように保護されていると宣言されている「OAuthBase」オブジェクトです。
private OAuthBase YQL;
次のように初期化されます。
public AverageEverydayConstructor()
{
...
YQL = new OAuthBase();
...
}
そして、ここで実際の非機能がすべて発生します (文字列 "key" は私のコンシューマー キーであり、"secret" は私のコンシューマー シークレットです)。
private string yahooRetrieveToken(string key, string secret)
{
string tokenRequestUrl = @"https://api.login.yahoo.com/oauth/v2/get_request_token";
string parameters = "";
string timestamp = YQL.GenerateTimeStamp();
string nonce = YQL.GenerateNonce();
parameters += "?oauth_nonce=" + nonce;
parameters += "&oauth_timestamp=" + timestamp;
parameters += "&oauth_consumer_key=" + key;
parameters += "&oauth_signature_method=HMAC-SHA1";
parameters += "&oauth_signature=" + secret;
parameters += "&oauth_version=1.0";
parameters += "&xoauth_lang_pref=en-us";
parameters += "&oauth_callback=\"oob\"";
string fullUrl = tokenRequestUrl + parameters;
Clipboard.SetText(fullUrl);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fullUrl);
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //this is the line that actually err's with 401.
Stream result = response.GetResponseStream();
//And yes, I'm aware I'm not using very good practice and haven't properly closed the stream. I'm just trying to get it to work first, but don't worry I haven't forgotten.
string unparsedResult = result.ToString();
return unparsedResult;
}
私は考えられるすべてを試し、このページ (http://developer.yahoo.com/oauth/guide/oauth-requesttoken.html) を何十回も調べました。すべてのベースをカバーしていることを確認するために、以下の 2 行を前後に変更してみました。変更があるかどうかを確認してください。
parameters += "&oauth_signature_method=PLAINTEXT";
parameters += "&oauth_signature=" + secret + "%26";
ありがとう!