はじめての Zoom API - OAuth編

<h2>■ 前置き</h2>
Zoomでは、Web管理画面やクライアント・アプリへZoomユーザのメールアドレス、パスワードでサインインすることで様々な機能をご利用いただくことができます。
一方、サードパーティ製のWebサービスからZoomユーザに代行して同等の処理をAPI経由で実施いただくことも可能です。
この「代行」処理を実現するための認証を強固に担うためZoomではOAuthを利用した連携をご用意しています。
ZoomでのOAuthは、ユーザのサインイン認証はZoom側で担いサードパーティ製のWebサービスへはAPIリクエストで必要となる「access_token」を発行することで実現しています。
以下、OAuth経由でAPIリクエストで必要となる「access_token」の取得方法についてご案内を進めたいと思います。

<h2>■ OAuthの大まかな流れ</h2>
以下図解で説明していきます。<br>
サードパーティ製のWebサービスを「Provider A」、エンドユーザを「User A」としています。<br>

<br>
補足）以下に記している「Publishable URL」、「Testable Url」、「Add URL」、「Client ID/Secret」については後述の「Marketplaceへの登録について」にてご確認いただけます。
</br>

1. 「User A」は「Provider A」で提供された「Publishable URL」（もしくは「Testable Url」、「Add URL」）を元にOAuth認証を開始します。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/f808874c-916d-fc35-e62e-64a2e255bdd0.png)

2. 「User A」は、「Publishable URL」（もしくは「Testable Url」、「Add URL」）を元に、Zoom側への認証ページへ誘導されます。
ここで、User A は、「Provider A」に自身のパスワードを共有することなくサインインします。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/072f9100-21e2-7159-2505-c009fd39b266.png)

3. サインインが完了すると、Zoomから「Provider A」へ「User A」に紐付いた「Authorization Code」をリダイレクトします。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/0898e1e1-b076-dd65-eefb-b908b6eae7f4.png)

4. 「Provider A」は、この「Authorization Code」と「Client ID/Secret」を組み合わせてZoomへ「User A」の「access_token」を要求します。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/afaae19f-902b-21d1-b6d7-a1684fc292f3.png)


5. 「Provider A」が「User A」の「access_token」を取得できたところでAPIリクエストを実行する準備が完了です。
- 発行される「access_token」の有効期間は１時間です。
- 同時に発行される「refresh_token」の有効期間は15年です。
- 「access_token」が失効した場合は、「refresh_token」を利用して「access_token」の再発行ができます。
- 「access_token」を発行（もしくは再発行）されたとくは必ず「refresh_token」もデータベース等に保管して利用できる状態にしておくことを推奨します。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/f29244a8-e0b0-f0d7-ee06-869754125db7.png)



<h2>■ Marketplaceへの登録について</h2>

OAuthを利用するためには、事前にMarketplaceでの登録が必要となります。

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) 「OAuth」 > 「Create」をクリックして登録を進めます。
![スクリーンショット 2022-04-28 11.50.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/7a687735-22de-7e38-1ee9-937afb7886f3.png)

4) 登録後の識別のため任意の名称を「App Name」に入力します。
利用するOAuthを管理者ユーザ専用にする場合は、「Account level app」を選択、
管理者を含む全ユーザの許容を含める場合は「User-managed app」を選択します。
また、OAuthの実装を自身のアカウント配下に所属しない外部ユーザへも展開を前提とする場合は「Would you like to publish this app to Zoom App Marketplace?」を有効にします。
今回は、「App Name」を「OAuth Sample」、「User-managed app」とし、アカウント内のユーザへのみ利用を前提に「Create」をクリックします。
![スクリーンショット 2022-04-28 13.13.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/5ecc2c52-0641-d11d-718b-ed36294497fe.png)

5) 「access_token」を取得する際に「Authorization」の生成で必要となる「Client ID」、「Client Secret」を控えます。
「Redirect URL for OAuth」へサービス提供側でリダイレクト処理を受けるURLを入力します。
「Add allow list」へZoom側へリダイレクトの際に送信元となり得るURLを記入します。（複数登録いただけます）
![スクリーンショット 2022-04-28 13.15.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/a00df5fd-e679-3c72-38de-b0a0446e6eca.png)

6) 次に最低限必要となる中の「Short description」、「Long description」を入力します。
![スクリーンショット 2022-04-28 13.16.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/31a54094-9a21-5ea5-e800-317073fb11c6.png)

7) 続いて同様に「Name」、「Email address」を入力します。
*OAuthに関わる重要な周知事項が発生した際にはZoomから「Email address」へ通知されますので必ず存在する値を入力ください。
![スクリーンショット 2022-04-28 13.17.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/ca137acb-ae71-a914-9212-2581db9a74e3.png)

8) OAuthを経て取得された「access_token」で利用できる範囲を「Scope」で指定します。
![スクリーンショット 2022-04-28 13.17.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/4c3511b3-a475-6825-93a9-69da5c375deb.png)
今回は、ユーザ自身の情報を許容できるよう「User」 > 「View user info」にチェックを入れ「Done」で閉じます。
![スクリーンショット 2022-04-28 13.41.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/b2648927-9e9f-6948-cf32-ee501fb06fdb.png)
![スクリーンショット 2022-04-28 13.43.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/ba2b801f-4e02-3224-86fb-87fd84cd9788.png)

9) サービス提供側から「Add Url」をユーザに提供することでZoomとのOAuth連携を開始いただけます。
![スクリーンショット 2022-04-28 13.43.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2123842/de094f4e-3571-55eb-2798-5571f6fef972.png)

<h2>■ 実装について</h2>
上記で解説した仕様をWebサービスの中で実装いただく必要がございます。<br><br>

Nodeでの実装サンプル：
https://github.com/ysawamura-zoom/Workshop/tree/main/OAuth
https://github.com/zoom/zoom-oauth-sample-app

OAuthの実装について：<a href="https://marketplace.zoom.us/docs/guides/auth/oauth" target=_blank>https://marketplace.zoom.us/docs/guides/auth/oauth</a>

OAuthで取得した「access_token」はhttpのヘッダー「Authorization」に「Bearer」として指定いただくことでAPIリクエストを実行いただけます。
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>
サードパーティ製のWebサービスで実装される各種リダイレクトurl、「Client ID/Secret」は、サービス提供側のZoomアカウントでMarketplaceより発行されたものをご利用ください。
上記を含めパスワードなどをエンドユーザに求めることは第三利用の不正に繋がり規約違反として双方のサービス停止に発展する恐れがございますので必ずご注意ください。
サービス提供側で登録利用しているZoomアカウント(テナント)以外のZoomユーザを対象とする場合は必ずMarketplaceでの申請承認プロセスを完了させ「Publishable URL」が開示可能な状態である必要がございます。

<br>Marketplaceでの開示方法について：　<a href="https://marketplace.zoom.us/docs/guides/publishing" target=_blank>https://marketplace.zoom.us/docs/guides/publishing</a>