2013-12-14 3 views
0

서비스 계정을 사용하여 Google Cloud Storage에 재개 가능한 다운로드를 초기화하려고합니다. 생성 된 인증 토큰은 유효하며 (확인한 결과는 https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=입니다) 응용 프로그램에 모든 권한이 있습니다. 그러나 재개 가능한 다운로드를 위해 새로운 URI를 얻으려고하면 401 오류 (유효하지 않은 자격 증명)가 표시됩니다. 여기서 내가 뭘 잘못하고 있니? { "오류": [{ "도메인" Google 클라우드 저장소 : 서비스 계정이있는 재개 가능한 다운로드가 HTTP 401을 수신합니다.

40 $key = file_get_contents(KEY_FILE); 
41 $client->setAssertionCredentials(new Google_AssertionCredentials(
42  SERVICE_ACCOUNT_NAME, 
43  array('https://www.googleapis.com/auth/devstorage.full_control'), 
44  $key) 
45); 
46 
47 $client->setClientId(CLIENT_ID); 
48 $service = new Google_StorageService($client); 
49 $buckets = $service->buckets; 
50 $bucketObj = new Google_Bucket(); 
51 
52 $time = time(); 
53 $b_name = "test_bucket_"."$time"; 
54 $bucketObj->setName($b_name); 
55 // $response = $buckets->insert('test_project-0001',$bucketObj); 
56 $response = $buckets->listBuckets('test_project-0001'); 
57 $tokenStr = $client->getAccessToken(); 
58 print "Token String : $tokenStr\n"; 
59 $token = ''; 
60 if(preg_match('/access_token\":\"(.*.)\",/', $tokenStr, $matches)) { 
61  print "Tken $matches[1] \n"; 
62  $token = $matches[1]; 
63 } 
64 
65 
66 $req = new Google_HttpRequest("https://www.googleapis.com/upload/storage/v1beta2/b/test_project-0001_test_bucket_1/o?uploadType=resumable&name=song"); 
67 $req->setRequestHeaders(array(
68       'Authorization:' => "$token", 
69       'X-Upload-Content-Length:' => '4509237')); 
74 $req->setRequestMethod('POST'); 
75 // $req->setPostBody($e_body); 
76 
77 var_dump($req); 
78 $gRest = new Google_REST(); 
79 $response = $gRest->execute($req); 
80 var_dump($response); 
81 
82 ?> 

나에게 다음과 같은 출력 { "오류"를 제공합니다 "글로벌", "이유": "authError" "메시지" "잘못된 자격 증명" "locationType에": "헤더" "위치": "인증" }] "코드"401 "메시지": "잘못된 자격증" } }

누구든지 내가 뭘 잘못하고 있는지에 대한 조언을 해줄 수 있습니까?

답변

0

나는 그것을 알아 냈다. 나는이 같은 인증 요청을 보낼 필요가 밝혀 :

63 $req->setRequestHeaders(array(
65       'X-Upload-Content-Length:' => '4509237')); 

(더 인증 매개 변수는 배열에 없다 통지)

77 $gcIO = new Google_CurlIO(); 
78 $response = $gcIO->authenticatedRequest($req); 
79 $resp_uri = $response->getResponseHeader('location'); 

을 그리고 그건 그