2017-01-25 12 views
0

OAuth 1.0 인증 프로세스의 첫 번째 단계를 완료하고 승인되지 않은 요청 토큰을 검색하려고합니다.C#의 OAuth 1.0을 통해 WordPress에 연결할 때 내 OAuth 서명이 일치하지 않는 이유는 무엇입니까?

401 OAuth 서명이 WordPress의 오류와 일치하지 않게됩니다. 우체부를 사용할 때 우연히 계산하는 서명이 우편 배달부가 계산하는 서명과 다르기 때문에 문제가 내가 서명을 해싱하는 방식과 관련이 있다는 것을 알고 있습니다. 또한 우체국을 통해 성공적으로 요청 토큰을 검색 할 수 있습니다.

어디에서 해시를 계산할 때 문제가 있습니까? HMAC-SHA1을 사용하고 있습니다.

private void AuthorizeWP() 
    { 
     string requestURL = @"http://mywordpressurl.com/oauth1/request"; 
     UriBuilder tokenRequestBuilder = new UriBuilder(requestURL); 
     var query = HttpUtility.ParseQueryString(tokenRequestBuilder.Query); 
     query["oauth_consumer_key"] = "myWordPressKey"; 
     query["oauth_nonce"] = Guid.NewGuid().ToString("N"); 
     query["oauth_signature_method"] = "HMAC-SHA1"; 
     query["oauth_timestamp"] = (Math.Truncate((DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds)).ToString(); 
     string signature = string.Format("{0}&{1}&{2}", "GET", Uri.EscapeDataString(requestURL), Uri.EscapeDataString(query.ToString())); 
     string oauth_Signature = ""; 
     using (HMACSHA1 hmac = new HMACSHA1(Encoding.ASCII.GetBytes("myWordPressSecret"))) 
     { 
      byte[] hashPayLoad = hmac.ComputeHash(Encoding.ASCII.GetBytes(signature)); 
      oauth_Signature = Convert.ToBase64String(hashPayLoad); 
     } 
     query["oauth_signature"] = oauth_Signature; 
     tokenRequestBuilder.Query = query.ToString(); 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(tokenRequestBuilder.ToString()); 
     request.Method = "GET"; 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    } 

답변

0

지금 내가 잘못하고있는 것을 깨닫습니다.

의 OAuth 1.0

당신이 당신의 해시 키의 바이트를 생성, 당신은 당신이 토큰이없는 경우에도 중간 에 '&'로 소비자/고객 비밀 토큰을 연결해야합니다.

출처 : https://oauth1.wp-api.org/docs/basics/Signing.html 위의 내 코드에 따라서

가 :

using (HMACSHA1 hmac = new HMACSHA1(Encoding.ASCII.GetBytes("myWordPressSecret"))) 

요구 될 :

using (HMACSHA1 hmac = new HMACSHA1(Encoding.ASCII.GetBytes("myWordPressSecret&"))