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 では、署名ベース文字列にリクエストの絶対 URL が含まれていると定義されています。したがって、これがサーバー側とコンシューマー側で異なる場合、署名の検証は失敗します。したがって、私の場合、消費者側で使用していました

127.0.0.1

リクエストURLのホスト名とサーバー側で使用していた

ローカルホスト

間違っているホスト名として。ホスト名としてlocalhostを使用するようにコンシューマーを変更した後、署名の検証に成功しました。

于 2012-09-04T04:59:20.950 に答える