Google のサービス アカウント認証を使用してサーバー アプリを認証しようとしていますが、何らかの理由でプッシュ スルーしません。
API コンソールで、プロジェクトを作成し、必要なサービス (Admin SDK) を有効にし、サービス アカウントと Web アプリケーション API アクセスを作成しました。
Web アプリケーションのアクセス資格情報を使用すると、ユーザー レコードを認証して取得できます。しかし、サービス アカウント認証を使用すると、ログインが必要なメッセージが表示され続けます。
"error": { "errors": [ { "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Login Required" }
追加するのを忘れていましたが、これを PHP クライアント ライブラリでテストしています。
public function init() {
$client = new Google_Client();
if (isset($_SESSION['access_token'])) {
$client->setAccessToken($_SESSION['access_token']);
}
$key = file_get_contents(App::SERVICE_KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
App::SERVICE_ACCOUNT_NAME,
App::SERVICE_API_SCOPES,
$key)
);
$client->setClientId(App::SERVICE_CLIENT_ID);
debug($client, 'CLIENT');
if ($client->getAccessToken()) {
$this->access_token = $_SESSION['access_token'] = $client->getAccessToken();
debug($_SESSION['access_token'], 'TOKEN');
} else {
debug('NO TOKEN');
}
$this->client = $client;
}
ご覧のとおり、コードは基本的に Google の例とほぼ同じです。余分な手順がありませんか?
最後に、Web アプリを使用して認証し、サービス アカウント スクリプトにアクセスすると、サービス アカウント スクリプトは Web アプリ スクリプトのセッションを取得し、ユーザー レコードの取得をプッシュ スルーできます。これは、Admin SDK API が Web アプリ認証によるユーザー操作を明示的に必要とするということですか?