見出し画像

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活用のメモが次のマガジンにあります。よろしければ覗いてみてください!


この記事が気に入ったらサポートをしてみませんか?