0

我的消费者代码如下,

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

以上签名验证失败,我不知道出了什么问题。请帮忙。

4

1 回答 1

1

我找到了这个原因。OAuth 1.0a 规范第 9.1.2 节定义 Signature Base String 包括请求绝对 URL。因此,如果服务器端与消费者端不同,则签名验证失败。所以就我而言,在消费者端我使用的是

127.0.0.1

对于请求 URL 的主机名和我正在使用的服务器端

本地主机

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

于 2012-09-04T04:59:20.950 回答