我的消费者代码如下,
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParameters.setOAuthType(OAuthType.TWO_LEGGED_OAUTH);
OAuthHmacSha1Signer signer = new OAuthHmacSha1Signer();
GoogleService service = new GoogleService("oauthclient", "sampleapp");
service.setOAuthCredentials(oauthParameters, signer);
String param = "Hellow World";
String baseString = APP_SERVER + "services/OAuthTest/greet"+"?xoauth_requestor_id="+USER_NAME+"&name="+ param;
URL feedUrl = new URL(baseString);
request = service.createFeedRequest(feedUrl);
request.execute();
convertStreamToString(request.getResponseStream());
我的OAuth服务器端代码如下,
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(consumerKey);
oauthParameters.setOAuthConsumerSecret(secretKey);
oauthParameters.setOAuthNonce(nonce);
oauthParameters.setOAuthTimestamp(timestamp);
oauthParameters.setOAuthSignatureMethod(signatureMethod);
validateTimestampAndNonce(otimestamp, nonce);
OAuthHmacSha1Signer signer = new OAuthHmacSha1Signer();
String baseString = OAuthUtil.getSignatureBaseString(baseUrl,httpMethod, baseParameters);
String signature = signer.getSignature(baseString, oauthParameters);
return signature.equals(oauthParams.getOauthSignature())
以上签名验证失败,我对错误没有任何线索。请帮忙。
答案 0 :(得分:1)
我找到了原因。 OAuth 1.0a规范第9.1.2节定义了签名基本字符串包含请求绝对URL。因此,如果服务器端的这种情况与消费者端的不同,则签名验证将失败。所以在我的情况下,在消费者端我使用
127.0.0.1
表示请求URL的主机名,而在服务器端我正在使用
本地主机
作为错误的主机名。在将消费者更改为使用 localhost 作为主机名后,我可以获得签名验证成功。