Google GData Java 2版OAuth签名验证失败

时间:2012-09-03 18:49:28

标签: oauth gdata oauth-provider 2-legged

我的消费者代码如下,

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())

以上签名验证失败,我对错误没有任何线索。请帮忙。

1 个答案:

答案 0 :(得分:1)

我找到了原因。 OAuth 1.0a规范第9.1.2节定义了签名基本字符串包含请求绝对URL。因此,如果服务器端的这种情况与消费者端的不同,则签名验证将失败。所以在我的情况下,在消费者端我使用

  

127.0.0.1

表示请求URL的主机名,而在服务器端我正在使用

  

本地主机

作为错误的主机名。在将消费者更改为使用 localhost 作为主机名后,我可以获得签名验证成功。