Java twitter OAuth,无法验证 oauth 签名

标签 java twitter oauth

我正在用 twitter 编写 oauth 代码,当我获取 post 时,我有 401 错误代码和 “无法验证 oauth 签名和 token ”来自 twitter 的响应请求 https://api.twitter.com/oauth/request_token 。这是我的数据:

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.通过代码创建签名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 Authorization header (带转义引号):

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 的人提问。 我的数据有什么问题? 我可以提供更多代码,但我认为它没有用。

附言- 我提供了工作凭证,我会在 3 - 4 小时后更改它们。

更新:这是我在 calculateSign 函数中使用的 key

fUJtvIpujTslQOlVbZY6QU8cNEMdwoxzTG1gh93SUgs%26

最佳答案

您的签名基本字符串中有错误。回调 url 应该是双重编码的,所以它应该是:

... &oauth_callback%3Dhttps%253A%252F%252Foauth.vk.com%252Fblank.html ...

此外,您不需要对签名 key 中的符号 ('&') 字符进行百分比编码,因此您应该使用:

fUJtvIpujTslQOlVbZY6QU8cNEMdwoxzTG1gh93SUgs&

您可以使用在线 OAuth Test Console 检查您的签名.

关于Java twitter OAuth,无法验证 oauth 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22191685/

相关文章:

node.js - 将 oauth 与 node-webkit 结合使用

java - 如何使用自己的应用程序在 Twitter 上发布推文

twitter - 如何在服务器端处理 Oauth nonces?

android - gmail 通过 oauth SMTPSendFailedException(需要身份验证)

java - 在java的内存游戏中保持2张图片打开一段时间

iphone - 如何使用 TWRequest 将地理定位附加到推文

java - 如何获得 Salesforce Oauth 响应?

java - 加载 JDBC 驱动程序时出现 classNotFoundException

java - diffie hellman 加密公钥给出错误的值

java - Eclipse 中的 I/O 重定向?