我正在用twitter编写oauth代码,我有401错误代码和"无法验证oauth签名和令牌"当我向 https://api.twitter.com/oauth/request_token 提取发布请求时,来自Twitter的回复。这是我的数据:
Consumer/api key - ffo9MLdRF8XOd9DKB0HeA
Consumer/api secret - fUJtvIpujTslQOlVbZY6QU8cNEMdwoxzTG1gh93SUgs
Url callback - https://oauth.vk.com/blank.html
我的步骤:
1.用于制作签名的准备字符串
POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhttps%3A%2F%2Foauth.vk.com%2Fblank.html%26oauth_consumer_key%3Dffo9MLdRF8XOd9DKB0HeA%26oauth_nonce%3Dfb0e9383f0c84326a124dd4ccfddd2d2%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1393951866%26oauth_version%3D1.0
2.Created签名 qQwIvFao9yeIQpi9ouz0oFi7 / v8 = 按代码:
public String calculateSign(String stringToEncode, String secret) throws Exception{
byte[] keyBytes = secret.getBytes();
byte[] text = stringToEncode.getBytes();
SecretKey secretKey = new SecretKeySpec(keyBytes, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secretKey);
byte[] encoded = mac.doFinal(text);
return new String(Base64.encode(encoded, Base64.DEFAULT)).trim();
}
3.Final 授权标头(带有转义引号):
OAuth oauth_nonce="fb0e9383f0c84326a124dd4ccfddd2d2", oauth_callback="https%3A%2F%2Foauth.vk.com%2Fblank.html", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1393951866", oauth_consumer_key="ffo9MLdRF8XOd9DKB0HeA", oauth_signature="qQwIvFao9yeIQpi9ouz0oFi7%2Fv8%3D", oauth_version="1.0"
向可能知道如何使用Twitter的人提问。 我的数据有什么问题? 我可以提供更多代码,但我认为它没用。
P.S。 - 我提供了工作证书,我将在3-4小时后更改它们。
UPD:这是我在calculateSign函数中使用的键
fUJtvIpujTslQOlVbZY6QU8cNEMdwoxzTG1gh93SUgs%26
答案 0 :(得分:1)
您的签名基本字符串中存在错误。回调网址应该是双重编码的,因此它应该是:
... &oauth_callback%3Dhttps%253A%252F%252Foauth.vk.com%252Fblank.html ...
此外,您不需要对签名密钥中的&符号('&')字符进行百分比编码,因此您应该使用:
fUJtvIpujTslQOlVbZY6QU8cNEMdwoxzTG1gh93SUgs&
您可以使用在线OAuth Test Console确认签名。