【发布时间】:2013-11-07 22:22:51
【问题描述】:
我在使用 Google OAuth Java Client 调用 twitter REST API 时遇到问题。我能够正确完成第一步:
- 设置授权网址,
- 获取临时令牌,
- 生成最终令牌。
使用存储的访问令牌授权 HTTP 请求到受保护的 通过设置 OAuthParameters.token 并使用 OAuthParameters 作为 HttpRequestInitializer。
在这一步中我遇到了问题。首先,如果我只设置 OAuthParameters.token 值,我会得到一个空异常,因为没有设置签名者,所以我目前拥有的是:
OAuthHmacSigner signer = new OAuthHmacSigner();
signer.clientSharedSecret=TWITTER_CONSUMER_SECRET;
String oauthToken = req.getParameter("oauth_token");
String oauthVerifier = req.getParameter("oauth_verifier");
OAuthGetAccessToken accessTokenRequest = new OAuthGetAccessToken(TWITTER_ACESS_TOKEN_URL);
accessTokenRequest.consumerKey=TWITTER_CONSUMER_KEY;
accessTokenRequest.signer=signer;
accessTokenRequest.transport=HTTP_TRANSPORT;
accessTokenRequest.temporaryToken=oauthToken;
accessTokenRequest.verifier=oauthVerifier;
OAuthCredentialsResponse credentials = accessTokenRequest.execute();
String token = credentials.token;
OAuthParameters params = new OAuthParameters();
params.token=token;
params.version="1.0";
params.consumerKey=TWITTER_CONSUMER_KEY;
params.signer=signer;
HttpRequestFactory requestFactory = HTTP_TRANSPORT.createRequestFactory(params);
HttpResponse twResponse = requestFactory.buildGetRequest(new GenericUrl("https://api.twitter.com/1.1/account/verify_credentials.json")).execute();
结果总是:
警告:身份验证错误:无法响应其中任何一个 挑战:{} com.google.api.client.http.HttpResponseException: 401 OK {"errors":[{"message":"Could not authenticate you","code":32}]}
如果我通过 REST Chrome 扩展工具尝试 Twitter OAuth 工具提供的 Authorization 标头,它可以完美运行,因此这不是帐户问题。当我将其更改为由 Google OAuth Java 客户端库计算的 Authorization 标头值时,它不起作用。
我不明白我做错了什么。
解决方案:按照@Arkanon 提供的链接中的教程进行操作,我错过了刷新签名者令牌通过:
signer.tokenSharedSecret
【问题讨论】:
-
您是否尝试过使用其他任何库?
-
不,我没有...我打开这个赏金正是为了理解为什么它不能与这个一起工作,这意味着向在 twitter 或其他 oauth1.0 提供商中使用它的人寻求帮助
标签: java twitter oauth google-oauth-java-client