2013-08-26 1 views
0

모바일 앱을위한 트위터 로그인이 필요하다. 지금까지 저는 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 서명 및 토큰의 유효성을 검사 실패"... 그것은이 있습니다. 그러나 나는 보았다. 나는 아무것도 보지 못했다.

+0

나는 Asp.Net Identity를 살펴볼 것을 권한다. http://www.asp.net/identity 또는 SO에 대한 태그 http://stackoverflow.com/questions/tagged/asp.net-identity –

답변

관련 문제