Google Service Accountを使用したユーザー一覧取得 - [PHP]


はじめに

Googleのサービスアカウントを使用してGoogle Apps使用ユーザーの一覧を取得する必要があり調べてもちょっと情報が古かったので備忘録

環境

  • PHP

googleがphp向けにだしてるAPIクライアント使用 - このverが2.0になったので2.0を使用
https://github.com/google/google-api-php-client

前準備1

Google Developers Consoleからサービスアカウントの作成。
https://console.developers.google.com

  1. 認証情報 > 認証情報を作成からサービスアカウントキーを選択

  2. キー作成時にサービスアカウント名をサービス名として入力、役割を選択、キーのタイプをJSONを選択して作成

  3. 作成した「API Project-xxxxxxxxxxxx.jso」を「private_key.jsonへリネーム」

  4. サービスアカウントキーのサービスアカウントの管理を選択

  5. 先ほど作成したサービスアカウントを選んで編集を選択

  6. Google Appsのドメイン全体の委任を有効にするにチェックを入れて保存

  7. クライアントIDを表示を選択

  8. 表示されているクライアントIDをメモ

前準備2

Google AppsのAdmin consoleからサービスアカウントへ権限を付与する。
http://admin.google.com/

  1. セキュリティを選択
  2. もっと見る > 詳細設定 > API クライアント アクセスを管理するを選択
  3. 前準備1でメモっておいたクライアントIDをクライアント名へ記載、APIの範囲に必要なスコープをカンマ区切りで記載し承認。今回はとりあえず下記を追加詳しくは→https://developers.google.com/admin-sdk/directory/v1/guides/authorizing


4. セキュリティに戻ってAPIリファレンスのAPI アクセスを有効にするにチェックを入れて保存

ここまでで使用準備完了!

Composer使用

composer init
---省略---
composer require google/apiclient
private_keyを作成したディレクトリへ移動

user取得

google.php
<?php
require_once 'vendor/autoload.php';

// 証明書情報のセット
putenv('GOOGLE_APPLICATION_CREDENTIALS=private_key.json');

$client = new Google_Client();
// サービス名の設定:多分なんでもいい
$client->setApplicationName("hogehoge-service");
// デフォルト証明書使用(GOOGLE_APPLICATION_CREDENTIALS)セットしたい場合はsetAuthConfigで証明書パスを指定
$client->useApplicationDefaultCredentials();
// 使用するスコープを指定
$client->setScopes([Google_Service_Directory::ADMIN_DIRECTORY_USER_READONLY]);
// 権限を持ったユーザーのメールアドレス指定
$client->setSubject('[email protected]');

// サービスAPI名指定
$service = new Google_Service_Directory($client);

// 取得する際のオプション指定
$options = ['domain' => 'xxxxxxxx.co.jp','maxResults' => 500,'orderBy' => 'email'];

$results = $service->users->listUsers($options);
var_dump($results);

まとめ

事前設定がややこしいので面倒臭いがコード自体はかなりシンプルになっており、使い易い印象スコープの指定や権限周りについては必要最低限にしておかないとすべてのユーザーに対してなんでもできてしまうので注意が必要

参考

https://github.com/google/google-api-php-client
https://developers.google.com/api-client-library/php/
https://developers.google.com/admin-sdk/directory/v1/guides/authorizing