2017-01-25 2 views
0

私はOAuth 1.0認証プロセスの最初のステップを完了し、不正なリクエストトークンを取得しようとしています。C#でOAuth 1.0経由でWordPressに接続すると、OAuth署名が一致しないのはなぜですか?

私は401 OAuthの署名がWordPressからのエラーと一致していない取得し続けます。私はPostmanを使用するとき、私が計算した署名はPostmanが計算する署名とは異なるので、私が署名をハッシュしている方法に問題があることを知っています。また、私は正常に郵便配達員を介して取得し、未承認のリクエストトークンを取得することができます。

私はハッシュを計算するのに間違っていますか?私は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&"))

関連する問題