我正在尝试为OAuth请求生成签名。我是这样做的:
String toHash = URLEncoder.encode("POST&https://" + url + "&oauth_callback=oob&oauth_consumer_key=" + key + "&oauth_signature_method=HMAC-SHA1&oauth_timestamp=" + timeStamp + "&oauth_nonce=" + timeStamp);
String hash = computeHmac(toHash, secret);
...
public String computeHmac(String baseString, String key)
{
Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm());
mac.init(secret);
byte[] digest = mac.doFinal(baseString.getBytes());
return new String(Base64.encodeBase64(digest));
}
但是服务器告诉我签名是错误的。我做错了什么?皮斯帮忙......
答案 0 :(得分:3)
根据OAuth规范:
签名基本字符串是通过连接在一起构建的, 按顺序,以下HTTP请求元素:
大写的HTTP请求方法。例如:“HEAD”, “GET”,“POST”等。如果请求使用自定义HTTP方法,则为 必须编码(第3.6节)。
“&”字符(ASCII码38)。
编码后的3.4.1.2节中的基本字符串URI (第3.6节)。
“&”字符(ASCII码38)。
- 醇>
请求参数在3.4.1.3.2节之后归一化 正在编码(第3.6节)。
在基本字符串中,某些字符未正确编码和规范化。例如:
https:// -> https%3A%2F%2F
oauth_callback=oob -> oauth_callback%3Doob
...
有关字符串构造的所有详细信息均在此处:http://tools.ietf.org/html/rfc5849#section-3.4.1.1