はじめての Zoom API - JWT編

<h2>■ 前置き</h2>
Zoomでは、Web管理画面やクライアント・アプリへZoomユーザのメールアドレス、パスワードでサインインすることで様々な機能をご利用いただくことができます。
一方、Web管理画面にサインせずして同等の処理をAPI経由で実施いただくことも可能です。
尚、APIリクエストを実行するためには認証のためのトークンが必要となります。
以下、アカウント・オーナーの権限でAPIをご利用いただくためのJWTトークンの発行についてご案内いたします。
<br>
<br>
<font color="red"><b>注意)</b> 本内容であるJWT App は2023年6月に廃止を予定しています。<a href="https://qiita.com/yosuke-sawamura/items/fa036273a161b190478b" target=_blank>はじめての Zoom API - Server-to-server OAuth編</a> もしくは <a href="https://qiita.com/yosuke-sawamura/items/514e791afb4cb02fd956" target="_blank">はじめての Zoom API - OAuth編</a> の利用を推奨します。</font>

また、JWT App (または、Server to Server OAuth App)で生成いただけるアクセス・トークンは管理者権限のユーザID、パスワードと同じ権限を持っています。
自社で開発したプラットフォームへユーザから以下説明にある「Key、Secret」や生成後のトークンを共有いただく実装は個人情報の収集と同等にあたり、<font color="red">規約に反して</font>しまいます。別途OAuthを含むMarketplaceでの申請承認もしくは別途ISV契約をご検討ください。
JWT App (または、Server to Server OAuth App)は社内利用(Internal usage)でのみの許容となります。

<b>Zoomサービス規約</b>
日本語 : https://explore.zoom.us/ja/terms/ (3. a 登録情報)
英語 : https://explore.zoom.us/en/terms/ (3. a Registration Information.)

<b>Zoom API ライセンスおよび利用規約</b>
日本語 : https://explore.zoom.us/ja/legal/zoom-api-license-and-tou/ (6. サードパーティによる利用)
英語 : https://zoom.us/docs/en-us/zoom_api_license_and_tou.html (6. Third Party Use)

<h2>■ Marketplaceへの登録、JWTトークンの生成について</h2>

アカウント・オーナーの権限でAPIをご利用いただくためには事前にMarketplaceでJWTの登録を済ませておく必要があります。

1) 「<a href="https://marketplace.zoom.us" target=_blank>https://marketplace.zoom.us</a>」へサインイン(Sign in)します。
![スクリーンショット 2022-04-28 11.50.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/ea951e5b-305e-9bef-0fc7-4052437b889a.png)

2) 「Develop」 > 「Build App」から登録画面に進みます。
![スクリーンショット 2022-04-28 11.50.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/d96b7c1c-99d7-bf14-dccf-99060cc98f4f.png)

3) 「JWT」 > 「Create」をクリックして登録を進めます。
*既に生成されている場合はグレーアウトされ「View here」と表示されます。 
![スクリーンショット 2022-04-28 11.50.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/d8117028-e752-ff81-4bbf-8b8bc05b17c8.png)

4) 登録後の識別のため任意の名称を「App Name」に入力し「Create」をクリックします。
＊ここでは、「JWT Sample」と入力います。
![スクリーンショット 2022-04-28 11.52.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/132bddfc-0ce6-91d6-5302-eee53a97f546.png)

5) 詳細入力画面で赤字の必須項目を入力します。
*JWTに関わる重要な周知事項が発生した際にはZoomから「Email Address」へ通知されますので必ず存在する値を入力ください。
![スクリーンショット 2022-04-28 11.53.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/8de23a4d-a42a-de5f-dca2-c7c494ab11fa.png)

6) ここで、表示される「API Key」、「API Secret」がJWTトークンを生成する際に必須となります。
「API Key」、「API Secret」を控えることができたら次に実際利用するJWTトークンを生成します。
![スクリーンショット 2022-04-28 11.53.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/4cad537e-c087-ebd0-2b1e-25614b3ae72d.png)

7) JWT（JSON Web Token/RFC7519）に準拠じたトークンを生成します。
ここでは解説を容易にするため「<a href="https://jwt.io/" target=_blank>jwt.io</a>」で提供されるオンラインツールで進めます。
Marketplaceで採取した「API Key」、「API Secret」をそれぞれ「PAYLOAD」、「VERIFY SIGNATURE」に入力します。
また、「PAYLOAD」内の「exp」(失効期日)をepoc時刻で入力します。
左側「Encoded」に自動生成される文字列がJWTトークンとなります。
![スクリーンショット 2022-04-28 12.27.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/e7299f26-7aac-c437-8478-f82962006cc3.png)

補足) 今後JWTの利用はなく運用でも利用されないと判断した場合は「Deactivate your app」で無効にすることで以降の「API Key」、「API Secret」で生成されたAPIトークンの利用を抑制することが可能です。
![スクリーンショット 2022-04-28 11.54.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/0e402e6b-8709-fd0c-0be2-7e695cbb9db1.png)

<h2>■ JWTトークンを利用したAPIリクエストについて</h2>
HTTP経由のRestAPI形式でリクエストいただけます。
もちろんCurl等のコマンドラインツールを用いて簡易的に確認いただくことも可能です。

以下アカウントオーナー自身の情報を取得する例となります。
```
$ curl -s --request GET --url 'https://api.zoom.us/v2/users/me' \
--header 'Authorization: Bearer <JWTトークン>' \
| python -m json.tool
```
また、Nodeでの参考例もございます。
　<a href="https://github.com/zoom/zoom-api-jwt" target=_blank>Sample Node app using jsonwebtoken</a>

その他、ご利用いただけるAPIについては以下より開示しており、OpenAPI(Swagger)へも対応しております。
　<a href="https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/" target=_blank>https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/</a>

<h2>■ 注意事項</h2>
JWTで発行されるトークンは、アカウント・オーナー権限になります。
アカウント・オーナー(所有者)は、Zoomのアカウント(テナント)にアクセスして管理する完全な権限を持っていますので取り扱いにはご注意ください。
また、JWTにはrevoke(破棄)させる概念がございません。そのため、一度発行したトークンは失効期日を過ぎない限り利用可能となります。