Oauth验证错误

时间:2012-05-07 13:53:19

标签: android oauth verification

我正在尝试使用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);

当我发送请求时,它总是说“不良签名匹配”。我不知道Oauth。我不知道我哪里错了。有人能引导我走向正确的方向吗?

1 个答案:

答案 0 :(得分:0)

在我看来,您正在以正确的方式生成签名,但服务器响应通用的signature mismatch消息,因为:

首先,您不能对每个请求使用相同的随机数。您需要为每个请求随机生成一个新的随机数。

第二,对于每个请求,时间戳必须是UTC的当前时间。如果OAuth提供程序正确实现,它将允许在不久的将来或过去的时间戳。所以要确保你的时钟是正确的。

从我可以告诉您的签名生成看起来没问题,至少如果您尝试获取请求令牌。试试上面的两点,让我知道它是怎么回事:))