2013-08-17 1 views
0

documentation에 따라 Google OAuth2 토큰 확인 요청을 보낸 후 JSON 응답 데이터를 읽는 데 문제가 있습니다.토큰을 확인하는 데 도움이 필요합니다. JSON 응답 데이터를 읽을 수 없습니다.

data.audience; // undefined 
data.scope; // undefined 
data.userid; // undefined 
data.expires_in; //undefined 

이 무엇 JSON 응답 데이터입니다 : 내가 JSON 응답 데이터 객체가 나는 다음과 같은 얻을 검사 그래서

$http.get('https://www.googleapis.com/oauth2/v1/tokeninfo', {params: {access_token: accessToken.token}}) 
       .success(function (data, status, headers, config) { 
        $log.info("sendValidationRequest() method: data: " + data); 
        deferred.resolve(data); 
        accessToken.state = getSession().state = $window.sessionStorage.state = "AccessTokenValidated"; 
       }) 
       .error(function (data, status, headers, config) { 
        //handle error 
       }); 

: 여기

는 구글 OAuth2를 토큰 검증 요청입니다 크롬 개발자 도구의 내부 모습 : enter image description here

나는 expec JSON 응답 데이터를 documentation 당 JSON 배열로 지정합니다. JSON 응답 데이터가 인코딩 된 것으로 보입니다. 어떻게 해결할 수 있습니까? 내 문제 해결에 어떤 도움이 많이 감사합니다

HTTP/1.1 200 OK 
status: 200 OK 
version: HTTP/1.1 
access-control-allow-origin: http://localhost:8080 
access-control-expose-headers: Cache-Control,Content-Encoding,Content-Length,Content-Type,Date,Expires,Pragma,Server 
cache-control: no-cache, no-store, max-age=0, must-revalidate 
content-encoding: gzip 
content-length: 182 
content-type: application/json; charset=UTF-8 
date: Sat, 17 Aug 2013 08:00:05 GMT 
expires: Fri, 01 Jan 1990 00:00:00 GMT 
pragma: no-cache 
server: GSE 
x-content-type-options: nosniff 
x-frame-options: SAMEORIGIN 
x-xss-protection: 1; mode=block 

:

GET https://www.googleapis.com/oauth2/v1/tokeninfo? 
access_token=ya29.AHES6ZQBj6feCrXuDoqwA3FpX1T1HO8fH1eWegJbiBTp7Cs HTTP/1.1 
:host: www.googleapis.com 
origin: http://localhost:8080 
accept-encoding: gzip,deflate,sdch 
accept-language: en-US,en;q=0.8 
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 
:path: /oauth2/v1/tokeninfo? access_token=ya29.AHES6ZQBj6feCrXuDoqwA3FpX1T1HO8fH1eWegJbiBTp7Cs 
accept: application/json, text/plain, */* 
:version: HTTP/1.1 
referer: http://localhost:8080/calendar-app/ 
:scheme: https 
:method: GET 

여기 내 HTTP 응답 헤더는 다음과 같습니다

여기 내 HTTP 헤더 요청입니다.

감사합니다.

몇 가지 조사를 한 후에 AngularJS $ http 서비스와 관련된 문제가 있음을 발견했습니다. 이것은 JQuery에서 문제가되지 않기 때문입니다. 여기 내 유효성 검사 액세스 토큰 코드 JQuery와의 모습입니다 :

function validateToken() { 
     $.ajax({ 
      url: 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=' + accessToken, 
      data: null, 
      success: function(response){ 
       console.log('Our token is valid. and response.audience value is defined.'); 
      }, 
      error: function(error) { 
       console.log('Our token is not valid....'); 
      }, 
      dataType: "jsonp" 
     }); 
    } 

JQuery와 아약스 요청 헤더 (위 참조) 다른 요청 헤더가 $ HTTP 서비스 요청 헤더 다를 수 있습니다

GET https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.AHES6ZTewZF3-aEJ3p8mdJahvTtZDNELYjpqLsGaB10Fnmk&callback=jQuery172036758901784196496_1376731301308&_=1376731301856 HTTP/1.1 
:host: www.googleapis.com 
accept-encoding: gzip,deflate,sdch 
accept-language: en-US,en;q=0.8 
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 
:path: /oauth2/v1/tokeninfo?access_token=ya29.AHES6ZTewZF3-aEJ3p8mdJahvTtZDNELYjpqLsGaB10Fnmk&callback=jQuery172036758901784196496_1376731301308&_=1376731301856 
accept: */* 
:version: HTTP/1.1 
referer: http://localhost:8080/calendar-app/google-oauth-test2.html 
:scheme: https 
:method: GET 
의 요청이 $ HTTP 서비스에서 발급 한 때 구글 응답 헤더가 다른 회전

(위 참조) :

HTTP/1.1 200 OK 
status: 200 OK 
version: HTTP/1.1 
cache-control: no-cache, no-store, max-age=0, must-revalidate 
content-encoding: gzip 
content-length: 235 
content-type: text/javascript; charset=UTF-8 
date: Sat, 17 Aug 2013 09:21:40 GMT 
expires: Fri, 01 Jan 1990 00:00:00 GMT 
pragma: no-cache 
server: GSE 
x-content-type-options: nosniff 
x-frame-options: SAMEORIGIN 
x-xss-protection: 1; mode=block 
,

이제 AngularJS $ http 서비스 요청 헤더를 JQuery의 AJAX 요청 헤더가 어떻게 생겼는지와 어떻게 비교할 수 있을까요? 또는 동일한 결과를 얻는 다른 방법이 있습니다. 성공적인 액세스 토큰 유효성 검사 후 적절한 JSON 배열 객체를 Google에서 다시 가져 오는 것입니다.

다시 말하지만, 이것에 대한 도움은 매우 감사하겠습니다!

URL에 공백이 있는지 그리고 원시 JSON 응답을 표시하지 않는지에 대한 질문이 있으니 게시를 업데이트하고 있습니다. 크롬 개발자 도구에서 가져온이 그림이이 부분을 없애기를 바랍니다.

enter image description here enter image description here

+0

HTTP 응답 페이로드는 무엇입니까? 원시 JSON 응답입니다. – mariuss

+0

나는 첫 번째 사진에 응답 탭을 보여준다. 이미 포함 된 내용이 원하는 내용이 아닌 경우 원시 JSON 응답을 어떻게 표시합니까? –

+0

본문이 아닌 머리글 만 표시합니다. – mariuss

답변

1

많은 조사를 한 후에 $ http.get() 메서드 대신 $ http.jsonp() 메서드를 사용하여 문제를 해결할 수있었습니다. 원격 스크립트 요청을 할 때 초보자이기 때문에 JSONP이 무엇인지 몰랐기 때문에 $ http.jsonp() 메소드를 간과 한 것 같습니다.

은 이제 나의 새로운 코드는 다음과 같습니다

나는 내 문제를 보려면 시간이 걸렸습니다 모든 사람과 나의 질문에 응답하는 분들께 감사드립니다
$http.jsonp('https://www.googleapis.com/oauth2/v1/tokeninfo', 
       { 
        params: { 
         access_token: accessToken.token, 
         callback: 'JSON_CALLBACK' 
        } 
       }) 
       .success(function (data, status, headers, config) { 
        // Do something successful. 
       }) 
       .error(function (data, status, headers, config) { 
        // TODO: Handle the error 
       }); 

. AngularJS, JSONP 및 Google OAuth2에 익숙한 다른 사람에게 도움이되기를 바랍니다.

감사합니다.

0

이상한 반응의 주된 이유는 사이의 URL에 공백이 있다는 사실이다? 및 access_token.

문제를 재현하기 위해 실행할 수있는 전체 테스트 케이스가 없으면 그 이유를 설명 할 수 없습니다. 로컬 테스트에서 저를 재생산하지 못합니다.

+0

URL에 공백이있는 곳을 확실히 알지 못합니다. 나는 여기에 게시 한 것을 볼 공간이 없다. XHR 요청에 대한 크롬 개발자 도구의 새로운 그림을 보여주기 위해 업데이트 한 게시물의 끝을 확인하십시오. 강조 표시된 경로에서 볼 수 있듯이 URL에 공백이 없습니다. 설명 해주십시오. 고맙습니다. –

+0

GET https://www.googleapis.com/oauth2/v1/tokeninfo? access_token = ya29.AHES6ZQBj6feCrXuDoqwA3FpX1T1HO8fH1eWegJbiBTp7Cs HTTP/1.1 - 공간이 있습니다. 실제로, 개행처럼 보입니다. –

0

각도 1.2.x를 사용하면 발생하지 않습니다. 명백하게 각도 1.0.x는 google의 tokeninfo 서비스 거부를 앞당기 기위한 $ http 요청입니다.