我正在尝试使用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。我不知道我哪里错了。有人能引导我走向正确的方向吗?
答案 0 :(得分:0)
在我看来,您正在以正确的方式生成签名,但服务器响应通用的signature mismatch
消息,因为:
首先,您不能对每个请求使用相同的随机数。您需要为每个请求随机生成一个新的随机数。
第二,对于每个请求,时间戳必须是UTC的当前时间。如果OAuth提供程序正确实现,它将允许在不久的将来或过去的时间戳。所以要确保你的时钟是正确的。
从我可以告诉您的签名生成看起来没问题,至少如果您尝试获取请求令牌。试试上面的两点,让我知道它是怎么回事:))