2014-04-21 5 views
2

내 회사 웹 응용 프로그램에 트위터 통합을 추가하고 있지만 그에 대한 걸림돌이 있습니다.요청시 콜백 URL로 전달

현재 문제는 콜백 URL에 있습니다.

트위터에서 설정 값을 원하지만 우리 애플리케이션이 설치되는 방식으로 사이트에 액세스하는 각 고객은 자신의 URL을 갖고있는 것으로 보입니다.

이상적으로 나는 콜백 URL을 설정하고 싶습니다. 그러나 그것에 관한 정보를 찾는 데 어려움을 겪고 있습니다.

는 편집 : 내가 더 나은 도움말을 여기에 몇 가지 세부 사항을 더 추가해야 할 수 있습니다 생각 당신은 도움이 저

문제입니다 I 설정 콜백 URL의 https://api.twitter.com/oauth/request_token에 매개 변수하지만 허가를 받아야 https://api.twitter.com/oauth/authorize에 갈 때, 그것은 것 이전 요청에서 설정 한 것이 아니라 API의 콜백 설정으로 이동하십시오. 여기

내 코드 같은 모습입니다 :

public string oAuthToken(string callbackUrl) 
    { 
     Uri oauthUrl = new Uri("https://api.twitter.com/oauth/request_token"); 
     var oauthNonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString())); 
     var oauthTimestamp = this.GenerateTimeStamp(); 
     var oauthSignature = ""; 

     var authSignature = string.Format("oauth_callback=\"{0}\"&oauth_consumer_key=\"{1}\"&oauth_nonce=\"{2}\"&oauth_signature_method=\"{3}\"&oauth_timestamp=\"{4}\"&oauth_version=\"{5}\"", 
      Uri.EscapeDataString(callbackUrl), 
      Uri.EscapeDataString(this.ConsumerKey), 
      Uri.EscapeDataString(oauthNonce), 
      Uri.EscapeDataString(oauthSignatureMethod), 
      Uri.EscapeDataString(oauthTimestamp), 
      Uri.EscapeDataString(oauthVersion)); 

     var baseString = string.Format("POST&{0}&{1}", Uri.EscapeDataString(oauthUrl.AbsoluteUri), Uri.EscapeDataString(authSignature)); 
     var compositeKey = string.Concat(Uri.EscapeDataString(this.ConsumerSecret), "&"); 

     using (HMACSHA1 hasher = new HMACSHA1(Encoding.ASCII.GetBytes(compositeKey))) 
     { 
      oauthSignature = Convert.ToBase64String(hasher.ComputeHash(Encoding.ASCII.GetBytes(baseString))); 
     } 

     var authHeader = string.Format("oauth oauth_callback=\"{0}\", oauth_consumer_key=\"{1}\", oauth_nonce=\"{2}\", oauth_signature=\"{3}\", oauth_signature_method=\"{4}\", oauth_timestamp=\"{5}\", oauth_version=\"{6}\"", 
      Uri.EscapeDataString(callbackUrl), 
      Uri.EscapeDataString(this.ConsumerKey), 
      Uri.EscapeDataString(oauthNonce), 
      Uri.EscapeDataString(oauthSignature), 
      Uri.EscapeDataString(oauthSignatureMethod), 
      Uri.EscapeDataString(oauthTimestamp), 
      Uri.EscapeDataString(oauthVersion)); 

     ServicePointManager.Expect100Continue = false; 
     HttpWebRequest authRequest = (HttpWebRequest)System.Net.WebRequest.Create(oauthUrl); 

     authRequest.Method = "POST"; 
     authRequest.Headers.Add("Authorization", authHeader); 
     authRequest.Headers.Add("Accept-Encoding", "gzip"); 
     authRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; 
     authRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

     try 
     { 
      using (var response = authRequest.GetResponse() as HttpWebResponse) 
      { 
       if (response.StatusCode != HttpStatusCode.OK) 
       { 
        throw new Exception(String.Format("Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription)); 
       } 

       var stream = response.GetResponseStream(); 
       var sr = new StreamReader(stream); 
       return sr.ReadToEnd(); 
      } 
     } 
     catch (WebException ex) 
     { 
      using (var stream = ex.Response.GetResponseStream()) 
      using (var reader = new StreamReader(stream)) 
      { 
       return reader.ReadToEnd(); 
      } 
     } 
    } 

난 항상 다시 401 오류가 발생합니다.

+0

이 라이브러리가 더 이상 유지 관리되지 않아 더 나은 솔루션을 찾고 싶지만 TweetSharp를 지금 사용하기로 결정했습니다. – Eman

답변

0

응용 프로그램 설정에서 https://apps.twitter.com/ 콜백 URL이 필요하지만 OAuth 1.0A 사양에는 요청 토큰과 함께 콜백 URL이 전달되어야합니다. 해당 요청에 유효한 URL을 전달할 수 있으므로 각 콜백을 효과적으로 각 사용자의 고유 URL로 이동합니다. 따라서 애플리케이션 설정시 콜백 URL에 고정되어 있지 않습니다.

+0

아, 내 말을 계속 지키는 것은 다른 콜백 URL을 설정하는 방법입니다. oauth_callback을 사용할 때마다 API가 기본 콜백 설정을 사용하는 것처럼 보입니다. – Eman

+0

더 나은 지원을 위해 제 질문을 업데이트했습니다. – Eman

+0

백분율로 인코딩 된 콜백 URL을 가진'callback_url' 매개 변수를 [request_token 끝점] (https://dev.twitter.com/docs/api/1/post/oauth/request_token)에 전달해야합니다. 이 예제는 파이썬으로 작성되었지만 데모 애플리케이션에서는 [작업 예제] (http://quiet-retreat-1002.herokuapp.com/)를 볼 수 있습니다. –