要旨
企業の情シスとして GSuite の管理者してます。社員からの「パスワード忘れたお」メールがうざいので、GAS から API 叩いてリセットする仕組みを作りました。その際にはまったことを記します。
スクリプト
function resetPassword(id, pw){
let userKey = id; // hoge@company.org
let data = {
"password": pw, // 仮パスワード
"changePasswordAtNextLogin": true, // ログイン後にパスワードの変更を強制
}
let res = AdminDirectory.Users.update(JSON.stringify(data),userKey);
Logger.log(res);
}
はまったこと
API アクセスキーとかいるのいらないの?
結果的には不要でした。G Suite の管理コンソールにて Directory API の呼び出しを有効にすれば OK。
[Enabling Google Advanced Services]
(https://developers.google.com/apps-script/guides/services/advanced?hl=ja#enabling_advanced_services)
(https://developers.google.com/apps-script/guides/services/advanced?hl=ja#enabling_advanced_services)
自ドメインの Google Drive 上の GAS スクリプトから API 経由で自ドメインのリソースを操作するのは無条件に許可されます。
GAS のマニュアルどれ読めばいいの?
まずはこちらを読みましょう。私はここにたどり着くのに 1 時間迷いました。
[G Suite Developer > Admin SDK > Directory API > GAS]
(https://developers.google.com/admin-sdk/directory/v1/quickstart/apps-script?hl=ja)
(https://developers.google.com/admin-sdk/directory/v1/quickstart/apps-script?hl=ja)
次いでユーザー操作 API の仕様を確認しましょう。
[G Suite Admin SDK > Directory API > Users]
(https://developers.google.com/admin-sdk/directory/v1/reference/users?hl=ja)
(https://developers.google.com/admin-sdk/directory/v1/reference/users?hl=ja)
今回作成したパスワード上書きスクリプトは、update メソッドを使います。
[G Suite Admin SDK > Directory API > Users.update]
(https://developers.google.com/admin-sdk/directory/v1/reference/users/update?hl=ja)
(https://developers.google.com/admin-sdk/directory/v1/reference/users/update?hl=ja)
これらのドキュメントを読んでも、GAS の関数として call する場合「第一引数に何を指定すればよいか」といった基本的な説明が見当たりませんでした。(userKey, data) の順で指定するも Parse Error、data にエントリーすると引数が一致しません、などなど。
試行錯誤の結果、(data, userKey)という直感に反した順序であることが判明。ひどい。
まとめ
GSuite API に関する日本語の記事は案外見つからないので、情シスな方々のお役に立てれば幸いです。