2017-11-10 16 views
1

最初に、私はXero APIを使用していません。これは特に私が思うXeroよりOAuth2の質問です。OAuth2エンドポイント投稿リクエストXero

問題が一般的なOAuth2問題かOAuth2のXero実装であるかどうかは不明です。私は首尾よく認証でき、Xeroから私のトークンなどを得ることができます。請求書や連絡先のエンドポイントへのGetリクエストを成功させることさえできます。私の問題は何かをPOSTしようとしている、つまり請求書を作成しようとしています。

サーバーは、400 Bad Requestで応答します。 XMLをAPIテスターに​​入れて、実際の投稿データが正しいことを確認しました。すべてが適切です。 、(POST)、クエリ文字列?oauth_signature=[sig here]、および実際の投稿データURLがエンコードされ、ストリーム経由で送信されるべきではありませんか?私の実装は正しいですか?問題の別の場所を調べるべきですか?フォームに送信されたデータは署名に含まれるはずですか?

{ 
    byte[] reqData = encode.GetBytes(postData); 

    HttpWebRequest request = WebRequest.CreateHttp(url + querystring) as HttpWebRequest; 
    request.Method = "POST"; 
    try { 
     using (Stream stream = request.GetRequestStream) { 
      stream.Write(reqData, 0, reqData.Length); 
     } 

     using (HttpWebResponse response = request.GetResponse) { 
      Stream dataStream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(dataStream); 

      dynamic responseFromServer = reader.ReadToEnd(); 
      return responseFromServer; 
     } 

    } catch (Exception ex) { 
    } 
} 

答えて

2

XeroはOAuth2ではなくOAuth1.0aを使用します。 OAuth署名は、クエリ文字列ではなくヘッダとして提供する必要があります。私はそれが成功しているGETリクエストとまったく同じであるはずだと信じています。

https://oauth.net/core/1.0a/#rfc.section.5.4.1

のOAuthプロトコル・パラメータは、次のようにヘッダ許可で送信される。

パラメータ名と値はパラメータの符号化ごとに符号化されます。 各パラメータの名前の直後には、 '='文字(ASCIIコード61)、 ''文字(ASCIIコード34)、パラメータ値(空でもよい)、別の '' '文字(ASCIIコード34)。 パラメータは、カンマ文字(ASCIIコード44)と[RFC2617]に従うオプションの線形空白で区切ります。 OPTIONALレルムパラメータは、[RFC2617]、セクション1.2に従って追加され、解釈されます。

関連する問題