2017-05-17 5 views
0

나는이 안내서를 완벽하게 따라 왔으며, 403 Insufficient Permission을 계속 유지하면서 Google에서 약간의 정보를 다시 얻으려고 시도했습니다. https://developers.google.com/api-client-library/php/auth/service-accounts서버용 서버용 Google OAuth 2.0 사용 PHP

서비스 계정을 만들었으며 개인 키, 프로젝트 ID, 클라이언트 전자 메일 및 클라이언트 ID 및 스택 오버플로에서 공유 할 수없는 멋진 json 파일을 제공합니다.

그런 다음 서비스 계정에 도메인 전체 권한을 지정하여 특정 API 범위에 위임했습니다. https://www.googleapis.com/auth/analytics.readonly Google Apps 도메인의 관리 콘솔을 통해이 작업을 수행했습니다.

나는 PHP의이 작은 비트로 인증 된 API 호출을 할 준비가되어있다.

<?php 

require_once __DIR__ . '/vendor/autoload.php'; 
date_default_timezone_set('America/Los_Angeles'); 

$user_to_impersonate = '[email protected]'; 


putenv('GOOGLE_APPLICATION_CREDENTIALS=/Users/alexfallenstedt/Desktop/Code/sticky-dash/service-account.json'); 

$client = new Google_Client(); 
$client->useApplicationDefaultCredentials(); 
$client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']); 
$client->setSubject($user_to_impersonate); 

$sqladmin = new Google_Service_SQLAdmin($client); 
$response = $sqladmin->instances->listInstances('examinable-example-123')->getItems(); 
echo json_encode($response) . '\n'; 

?> 

콘솔에서이 PHP 파일을 실행하는데이 오류가 계속 발생합니다.

Fatal error: Uncaught exception 'Google_Service_Exception' with message '{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "insufficientPermissions", 
    "message": "Insufficient Permission" 
    } 
    ], 
    "code": 403, 
    "message": "Insufficient Permission" 
} 
} 

나는 분실했습니다. 내 팀 전체가 없어 졌어. 우리는 이것을 여러 번 통과했습니다. Google Analytics보고 API 데이터를 가져 오기 위해 서버 간 통신을 설정하려면 어떻게해야합니까?

+1

인증 토큰이 표시되지 않습니다. 액세스 및 새로 고침 토큰을 얻었습니까? 그들은 사용자의 동의 후에 귀하에게 보내집니다. – Arbels

+0

@Arbels 애플리케이션이 서비스 계정을 대신하여 Google API를 호출하므로 사용자가 직접 참여하지 않습니다. 이 2-legged o-auth 예제가 실패하는 단계는 응용 프로그램이 인증 된 API 호출을 준비 할 때입니다. 서비스 계정의 자격증 명을 사용하여 OAuth 2.0 인증 서버에서 액세스 토큰을 요청하고 있지만 권한 오류가 계속 발생합니다. 자격 증명은'$ client-> useApplicationDefaultCredentials();'에서 사용되는 환경 변수'putenv ('GOOGLE_APPLICATION_CREDENTIALS ...');에 저장됩니다. –

+0

아, 가장 일반적인 [서버 측 앱] (https://developers.google.com/identity/protocols/OAuth2WebServer)을 언급했습니다. [앱 기본 자격증 명] (https://developers.google.com/identity/protocols/application-default-credentials) 접근 방법을 사용할 자격이 있습니까? – Arbels

답변