모바일 앱을위한 트위터 로그인이 필요하다. 지금까지 저는 tweetsharp와 linq2twitter를 포함한 많은 라이브러리를 시도했습니다. 그러나 나는 어디에도 가지 않고있다. 이 모든 문제로 저는 웹 클라이언트 호출에 의지했지만 다시 한 번 붙어 있습니다. 전화를 걸면 401 Unauthorized 오류가 발생합니다. 나는 여기에 나의 코드를 포함한다. 너희들은 전혀 잘못된 것을 볼 수 있니? 나는 정말로 이것으로 붙어있다.Twitter 요청 토큰이 401 권한이 없음을 반환합니다. 내가 잘못한 것을 찾을 수 없다.
string oauth_signature_method = "HMAC-SHA1";
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
string oauth_timestamp = Convert.ToInt64(ts.TotalSeconds).ToString();
string oauth_version = "1.0";
string oauth_consumer_key = "iD1232134AQ2Pb6Q";
string oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
SortedDictionary<string, string> sd = new SortedDictionary<string, string>();
sd.Add("oauth_version", oauth_version);
sd.Add("oauth_consumer_key", oauth_consumer_key);
sd.Add("oauth_nonce", oauth_nonce);
sd.Add("oauth_signature_method", oauth_signature_method);
sd.Add("oauth_timestamp", oauth_timestamp);
UrlEntity callback = new UrlEntity();
callback.Url = @"//tweeter";
string encodedCallbackUrl = HttpUtility.UrlEncode(callback.Url);
sd.Add("oauth_callback",encodedCallbackUrl);
WebClient wc = new WebClient();
wc.Headers.Add("User-Agent: randomAgent HTTP Client");
wc.Headers.Add("Host: api.twitter.com");
wc.Headers.Add(@"Accept: */*");
UrlEntity url = new UrlEntity();
url.Url = @"https://api.twitter.com/oauth/request_token";
string signature = CreateSignature(url, sd);
sd.Add("oauth_signature",signature);
string dataValues = "";
foreach (KeyValuePair<string, string> pair in sd)
{
dataValues += pair.Key + "=''" + pair.Value + "'',";
}
dataValues = dataValues.Substring(0, dataValues.Length - 1); // cuts off the last,
string headerVal = " Oauth " + dataValues;
wc.Headers.Add("Authorization",headerVal);
wc.UploadString(@"https://api.twitter.com/oauth/request_token", "");
wc.DownloadStringCompleted += WcOnDownloadStringCompleted;
다음은 서명을 작성하는 코드입니다.
public static string CreateSignature(UrlEntity url, SortedDictionary<string, string> sd)
{
string parameterString = "";
SortedDictionary<string, string> sd2 = new SortedDictionary<string, string>();
foreach (KeyValuePair<string, string> parameter in sd)
{
string encodedKey = HttpUtility.UrlEncode(parameter.Key);
string encodedvalue = HttpUtility.UrlEncode(parameter.Value);
sd2.Add(encodedKey,encodedvalue);
}
foreach (KeyValuePair<string, string> pair in sd2)
{
parameterString += pair.Key + "=" + pair.Value + "&";
}
parameterString = parameterString.Substring(0, parameterString.Length - 1); // cuts off the last &
string signatureString = "POST&";
var encodedUrl = HttpUtility.UrlEncode(url.Url); // percent encode URL
signatureString += encodedUrl + "&";
signatureString += HttpUtility.UrlEncode(parameterString); // percent encode entire parameter string
string consumerSecret = "supercorectConsumersecretfromtwitterwebsite";
string signingKey = HttpUtility.UrlEncode(consumerSecret) + "&";
HMACSHA1 hasher = new HMACSHA1(new ASCIIEncoding().GetBytes(signingKey));
string signatureStringFinal = Convert.ToBase64String(hasher.ComputeHash(new ASCIIEncoding().GetBytes(signatureString)));
return signatureStringFinal;
}
다소 지저분하지만 나는 붙어 있습니다. 다음 링크가 도움이 될 수 있습니다. https://dev.twitter.com/docs/auth/implementing-sign-twitter https://dev.twitter.com/docs/api/1/post/oauth/request_token https://dev.twitter.com/docs/auth/creating-signature
편집 :
내가 피들러를 사용하여 요청에 모습을 촬영했다. 응답 메시지는 가능성의 OAuth 서명이 잘못된 것을 의미
을 "의 OAuth 서명 및 토큰의 유효성을 검사 실패"... 그것은이 있습니다. 그러나 나는 보았다. 나는 아무것도 보지 못했다.
나는 Asp.Net Identity를 살펴볼 것을 권한다. http://www.asp.net/identity 또는 SO에 대한 태그 http://stackoverflow.com/questions/tagged/asp.net-identity –