2012-09-03 2 views
0

내 소비자 코드가 실패; 서명 유효성 검사 위구글의 GData 자바 두 다리의 OAuth 서명 검증) (</p> <p>GoogleOAuthParameters의 oauthParameters는 = 새로운 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

이유를 찾았습니다. OAuth 1.0a 명세 섹션 9.1.2는 서명 기본 문자열이 요청 절대 URL을 포함한다고 정의한다. 따라서 소비자 측과 서버 측에서 차이가 나는 경우 서명 검증에 실패합니다. 내 경우에는 그래서, 소비자 끝에서 나는 요청 URL의 호스트 이름을

127.0.0.1

을 사용하던 서버의 말에 나는

로컬 호스트를 사용했다

호스트 이름이 잘못되었습니다. 로컬 호스트을 호스트 이름으로 사용하도록 변경 한 후 서명 확인에 성공했습니다.