
GASでZoom APIのServer-to-Server OAuth認証
Zoom APIの認証は2023年6月からJWTが廃止されます。これまでJWTを使っていた場合、OAuthかServer-to-Server OAuthへの変更が求められます。
https://marketplace.zoom.us/docs/guides/build/jwt-app/jwt-faq/
うちはGoogle Apps ScriptでJWTを使っていたので、Server-to-Server OAuthに切り替えました。今回はそんな話です。
▍事前準備
Server-to-Server Appを作成したり、スコープを設定したりします。公式の解説が丁寧なので、詳しくはそちらに譲ります。
https://marketplace.zoom.us/docs/guides/build/server-to-server-oauth-app/
あるいは、日本語であれば次の記事もオススメです。
この準備によって、Account ID、Client ID、Client Secretが得られます。
▍サンプルコード
function myFunction() {
// 認証情報の設定
const accountId = "Account ID";
const clientId = "Client ID";
const clientSecret = "Client Secret";
// リクエストパラメータを設定
const url = "https://zoom.us/oauth/token";
const payload = {
grant_type: "account_credentials",
account_id: accountId
};
const encoded = Utilities.base64Encode(`${clientId}:${clientSecret}`)
const options = {
method: "POST",
headers: {
"Authorization": `Basic ${encoded}`
},
payload: payload,
};
// リクエストを実行
const response = UrlFetchApp.fetch(url, options);
// アクセストークンを抽出
const accessToken = JSON.parse(response).access_token;
}
認証情報(accoundID、clientId、clientSecret)は自身のものに置き換えてください
Utilities.base64EncodeやUrlFetchAppを使っているあたりがGAS特有です
ここではエラー処理や関数化は記述していません
いったんアクセストークンが得られれば、JWTの際に使っていたコードを使いまわせます。正しく動作しない場合、Server-to-Server Appのスコープ設定などを見直してみてください。
▍おわりに
GASではJWTの記事が多い印象だったので、Server-to-Server OAuthを使う方・移行する方向けに残しておきました。どなたかのご参考になれば嬉しいです。
私たちのIT活用のメモが次のマガジンにあります。よろしければ覗いてみてください!