0

Twitter でサインインするには、「署名」を提供する必要があるようです。これで、access_token と access_token_secret を取得できます。

しかし、署名を作成するということは、(署名キーとして使用して) access_token_secret を提供する必要があることを意味します。

元気?The remote server returned an error: (401) Unauthorized.アプリケーション インターフェイスによって生成された access_token_secret を使用しても、常に を取得します。

他の方法で署名キーを作成する必要がありますか? これは、C# .NET での実際のコードです。

var requestedURL = "https://api.twitter.com/oauth/request_token";

var authorizationParameters = new List<KeyValuePair<string, string>>() { 
        new KeyValuePair<string, string>("oauth_callback",SocialEngine.twitter_aggrega_redirect_uri),
        new KeyValuePair<string, string>("oauth_consumer_key",oauth_consumer_key),
        new KeyValuePair<string, string>("oauth_nonce",oauth_nonce),
        new KeyValuePair<string, string>("oauth_signature_method",oauth_signature_method),
        new KeyValuePair<string, string>("oauth_timestamp",oauth_timestamp),
        new KeyValuePair<string, string>("oauth_version",oauth_version)
};

var allParameters = authorizationParameters.OrderBy(tmp => tmp.Key);

var baseString = string.Join("&", allParameters.Select(p => string.Format("{0}={1}", p.Key, Uri.EscapeDataString(p.Value))));
baseString = string.Concat("POST&", Uri.EscapeDataString(requestedURL), "&", Uri.EscapeDataString(baseString));

var compositeKey = string.Concat(Uri.EscapeDataString(oauth_consumer_secret), "&", Uri.EscapeDataString(oauth_access_token_secret));
using (System.Security.Cryptography.HMACSHA1 hasher = new System.Security.Cryptography.HMACSHA1(System.Text.ASCIIEncoding.ASCII.GetBytes(compositeKey)))
{
    oauth_signature = Convert.ToBase64String(hasher.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(baseString)));
}

oauth_header += "OAuth ";
oauth_header += "oauth_callback=" + "\"" + Uri.EscapeDataString(SocialEngine.twitter_aggrega_redirect_uri) + "\",";
oauth_header += "oauth_consumer_key=" + "\"" + Uri.EscapeDataString(oauth_consumer_key) + "\",";
oauth_header += "oauth_nonce=" + "\"" + Uri.EscapeDataString(oauth_nonce) + "\",";
oauth_header += "oauth_signature=" + "\"" + Uri.EscapeDataString(oauth_signature) + "\",";
oauth_header += "oauth_signature_method=" + "\"" + Uri.EscapeDataString(oauth_signature_method) + "\",";
oauth_header += "oauth_timestamp=" + "\"" + Uri.EscapeDataString(oauth_timestamp) + "\",";
oauth_header += "oauth_version=" + "\"" + Uri.EscapeDataString(oauth_version) + "\"";

HttpWebRequest request = WebRequest.Create(requestedURL) as HttpWebRequest;
request.Headers.Add("Authorization", oauth_header);
request.Method = "POST";
4

1 に答える 1

1

リクエスト トークンの署名を作成するときは、アンパサンド (&) を追加した oauth_consumer_secret のみを使用して署名キーを作成します。

于 2013-10-08T20:40:09.900 に答える