Аутентификация аккаунта сервиса Google PHP
Я пытаюсь аутентифицировать учетную запись службы, чтобы использовать маркер доступа с клиентской библиотекой JSON_API.
Я просмотрел эти статьи:
Https://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount.php
https://code.google.com/p/google-api-php-client/wiki/UsingTheLibrary
Https://developers.google.com/storage/docs/authentication#service_accounts https://developers.google.com/accounts/docs/OAuth2#scenarios
Вот мой PHP код
<?php
require_once 'google-api-php-client/src/Google_Client.php';
const CLIENT_ID = "";
const SERVICE_ACCOUNT_NAME = "";
const KEY_FILE = "super secret path of course ;)";
$client = new Google_Client();
// Loads the key into PKCS 12 format
$key = file_get_contents(KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/prediction'),
$key
)
);
$client->setClientId(CLIENT_ID);
$auth = $client->authenticate();
print $auth ? "Returned true" : "Returned false";
print "<br>";
print is_null($client->getAccessToken()) ? "It's null" : "Works";
?>
Вот мой вывод:
Возвращено true
Это null
2 ответа:
Я наконец-то понял, как аутентифицировать с помощью библиотеки PHP API после использования смеси различных ресурсов.
Вот мой класс аутентификации для Google php api libray
<?php require_once 'google-api-php-client/src/Google_Client.php'; require_once 'google-api-php-client/src/contrib/Google_StorageService.php'; class Model_Storage_Auth { const CLIENT_ID = "someuniquenumber.apps.googleusercontent.com"; const SERVICE_ACCOUNT_NAME = "myserviceaccountname@developer.gserviceaccount.com"; const KEY_FILE = "/supersecretpath/key.p12"; const ACCESS_TOKEN = 'access_token'; const APP_NAME = 'My App Name'; private $google_client; function __construct() { $this->google_client = new Google_Client(); $this->google_client->setApplicationName(self::APP_NAME); } public function getToken() { if(!is_null($this->google_client->getAccessToken())){} elseif(!is_null(Session::get(self::ACCESS_TOKEN, null))) { $this->google_client->setAccessToken(Session::get(self::ACCESS_TOKEN, null)); } else { $scope = array(); $scope[] = 'https://www.googleapis.com/auth/devstorage.full_control'; $key = file_get_contents(self::KEY_FILE); $this->google_client->setAssertionCredentials(new Google_AssertionCredentials( self::SERVICE_ACCOUNT_NAME, $scope, $key) ); $this->google_client->setClientId(self::CLIENT_ID); Google_Client::$auth->refreshTokenWithAssertion(); $token = $this->google_client->getAccessToken(); Session::set(self::ACCESS_TOKEN, $token); } return $this->google_client->getAccessToken(); } }
Пара вещей, которые нужно проверить:
Во-первых, я предполагаю, что
CLIENT_ID
иSERVICE_ACCOUNT_NAME
устанавливаются на ваш фактический идентификатор клиента и имя учетной записи службы, а не просто пустые строки, верно?Во-вторых, вы используете область OAuth
https://www.googleapis.com/auth/prediction
, но пытаетесь использовать ее для доступа к GCS. Вы захотите использовать область только для чтения, чтения и записи или полный контроль, который вы можете найти здесь . Например, если вы хотите получить доступ на чтение и запись, вы должны использовать областьhttps://www.googleapis.com/auth/devstorage.read_write
.