2013-06-27 1 views
0

Google 사용자가 내 앱에 로그인 할 수 있도록 Google oauth api를 사용하려고합니다. 그리고 나는 Google의 OAuth2Login 문서를 모두 따라 왔습니다.google oauth api를 사용하여 access_token을 가져오고 'o/oauth2/approval`로 리디렉션하려고합니다.

코드를 가져 오는 데이 코드를 사용 했으므로 문제가 없습니다. 나는 /o/oauth2/token API를 아래 등으로 access_token이를 얻으려고하면서

var u = 'https://accounts.google.com/o/oauth2/auth?' 
    + '&response_type=code' 
    + '&client_id=' + opts.googleClient 
    + '&redirect_uri=' + redirectURI 
    + '&scope=' + opts.scope 
    + '&approval_prompt=force&access_type=offline'; 

는하지만 :

var u = 'https://accounts.google.com/o/oauth2/token?' 
     + 'code=' + code 
     + '&client_id=' + opts.googleClient 
     + '&client_secret=' + opts.googleSecret 
     + '&scope=' 
     + '&redirect_uri=' + redirectURI 
     + '&grant_type=' + 'authorization_code'; 
    request.post({url: u, json: true}, fn); 

를 내가 확인했습니다 나에게

{ 
    error: "invalid_request" 
} 

을 돌려 그 크롬 개발자 도구 요청 URL이 내가 게시하는 대신 https://accounts.google.com/o/oauth2/approval?as=-5013c18c497345fc&hl=en&pageId=none&xsrfsign=APsBz4gAAAAAUcwS1TxlojrAPVNCj7ntTlz1H4xQgysC임을 나타내는 네트워크 바.

내 게시물 URL과 데이터가 정확히 Google oauthplayground에 있는지 확인할 수 있습니다. 그러나 그 결과는 완전히 다릅니다.

내가 잘못 했나요? 도와주세요.

답변

0

전송중인 데이터가 올바르게 보이지만 요청 작성 방법에 오류가 두 개있는 것처럼 보입니다.

먼저 메시지의 양식 데이터 부분을 구성 할 때 URL의 모든 값을 인코딩해야합니다 (예 : redirect_uri 값에 &이 포함되어 있으면 URL 인코딩이되어 있지 않으면 문제가 발생할 수 있습니다.

둘째, GET 대신 POST를 올바르게 수행하는 동안 요청 본문 대신 쿼리 문자열에 매개 변수를 계속 보내고 있습니다. 본문으로 이동하고, content-type을 'application/x-www-form-urlencoded'로 설정하고 설정해야합니다.

(자바 스크립트처럼 보이지만 사용중인 라이브러리가 확실하지 않아 샘플 코드를 제공하지 않았습니다.)

+0

답장을 보내 주셔서 감사합니다. 저는 실제로 nodejs를 사용하고 있습니다. 여기서는 [github gist] (https://gist.github.com/fraserxu/5881632)의 코드를 사용하고 있습니다. 나는'application.x-www-form-urlencoded' 호출을 만들기 위해'request'라는 노드 모듈을 사용하려했지만 동일한 결과를 얻었다. 매개 변수와 본문에 문제가 있는지 확인할 수 있습니까? 감사. – fraserxv

+0

양식 데이터에서 "범위"를 제거하고 URL에서 "코드 ="를 양식 데이터로 옮깁니다. – aeijdenberg

+0

그것은 작동합니다! 고맙습니다. Google은'application/x-www-form-urlencoded' 콘텐츠 유형 만 지원합니다. 하지만 oauthPlayground에서 작동하는 이유는 알 수 없습니다. 감사합니다. – fraserxv

관련 문제