0

検証に Oauth を使用しようとしています。私のコード例は次のとおりです。

ArrayList <NameValuePair> params = new ArrayList<NameValuePair>();
  boolean flag=false;
  URL url;

  String oauth_nonce="q14F5ApN4Ka5RJGbYgabXwMSZ4BxVrlNGedN9zoFAoi3rc7dpLjIgri1erAAriPu";
  String oauth_timestamp="1336069726";
  String signatureString =
    URLEncoder.encode("device_id=id_here")
    +URLEncoder.encode("&device_type=psw_here")
    +URLEncoder.encode("&oauth_consumer_key=consumer_key_here...&oauth_nonce=" +
      oauth_nonce+
      "&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1336069726&oauth_version=1.0");

  String percent_encoded_url = URLEncoder.encode("http://www.example.com");
  String signatureBaseString = "POST"+
    "&"+percent_encoded_url+
    "&"+signatureString;

  String oauth_signature=URLEncoder.encode(computeHmac(signatureBaseString, "aWAQTWR7VvHapaNhWBCL0VaUdGN2xzN4&"));

  String headerValue ="OAuth "+
    "oauth_consumer_key=\""+"consumer_key_here..."+"\","+
    "oauth_signature_method=\"HMAC-SHA1"+"\","+
    "oauth_signature=\""+oauth_signature+"\","+
    "oauth_timestamp=\"1336069726"+"\","+
    "oauth_nonce=\""+oauth_nonce+"\"," +        
    "oauth_version=\"1.0"+"\"";


  HttpPost httppost = new HttpPost("http://www.example.com/");

  httppost.setHeader("Content-Type","application/x-www-form-urlencoded");
  httppost.setHeader("Authorization",headerValue);
  HttpEntity httpentity = new UrlEncodedFormEntity(params);

  HttpClient httpclient = new DefaultHttpClient(clientConnectionManager, httpparams);

  StringBuilder sb = new StringBuilder();
  try {

   HttpResponse response = httpclient.execute(httppost);

リクエストを送信すると、常に「Bad Signature Match」と表示されます。Oauth についての知識はありません。どこが間違っているのかわかりません。誰かが私を正しい方向に導くことができますか?

4

1 に答える 1

0

正しい方法で署名を生成しているように見えますが、サーバーは次のsignature mismatch理由で一般的なメッセージで応答します。

まず、すべてのリクエストに同じナンスを使用することはできません。リクエストごとにランダムに新しいナンスを生成する必要があります。

次に、すべてのリクエストについて、タイムスタンプはUTCでの現在の時刻である必要があります。OAuthプロバイダーが正しく実装されている場合、非常に近い将来または過去のタイムスタンプが許可されます。だからあなたの時計が正しいことを確認してください。

少なくともリクエストトークンを取得しようとしている場合は、署名の生成は問題ないように見えます。上記の2つのポイントを試して、どうなるか教えてください:)

于 2012-05-08T09:25:05.747 に答える