Zoom API(JWT)を試してみた

## 本記事について
 Zoom が協賛する、Qiita Engineer Festa 2022 「Zoom API/SDKを使ってみよう！」テーマに基づいて試したことをまとめたもの

## やったこと
Zoom API（JWT)を試してみた

## JWTとは？
JWTとは、JSON Web Tokenの略称で、JSON形式で表現された認証情報などをURL文字列などとして安全に送受信できるよう、符号化やデジタル署名の仕組みを規定した標準規格。IETFによってRFC 7519として標準化されている。
参考:https://e-words.jp/w/JWT.html

## 環境
Mac:Monterey ver12.4
言語:python

## 参考にした記事
https://qiita.com/nanbuwks/items/ed74a76a0f294c0bf4ed

## 手順
### 1.アプリの登録とAPIキーの生成
Develop>Build Appを選択
![スクリーンショット 2022-07-03 17.08.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1695131/fdd76049-112a-3564-6853-06753d83de80.png)

### 2.JWTを選択

Choose your app type>JWT>createを選択
※キャプチャは作成後の画面（createボタンがView hereに変わっている）
![スクリーンショット 2022-07-03 17.10.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1695131/2eb7f986-f85f-eb58-2f8e-2de7c0080d16.png)

### 3.任意のアプリ名を登録
![スクリーンショット 2022-07-03 17.12.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1695131/20267520-0da2-d5fe-1f68-8e9e2ebf5946.png)

### 4.必要項目を埋めていく
![スクリーンショット 2022-07-03 17.13.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1695131/fa3b898e-d31a-f325-f3ef-6cfd8cedd7fa.png)

### 5.API取得
今回はAPI KeyとAPI Secretを取得
![スクリーンショット 2022-07-03 17.15.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1695131/27907872-2fa4-5214-306a-bd5c775cc6b2.png)

### 6.実行するプログラムコード
```py
import http.client
import base64
import time
import hmac
import hashlib

API_Key = 'xxxxxxxxxxxxxx'  # 取得したKeyに入れ替えてください
API_Secret = 'xxxxxxxxxxxxxxxxxxxxxxxx'   # 取得したSecretに入れ替えてください
expiration = int(time.time()) + 5 # 有効期間5秒

header    = base64.urlsafe_b64encode('{"alg":"HS256","typ":"JWT"}'.encode()).replace(b'=', b'') # ヘッダー
payload   = base64.urlsafe_b64encode(('{"iss":"'+API_Key+'","exp":"'+str(expiration)+'"}').encode()).replace(b'=', b'') # APIキーと>有効期限

hashdata  = hmac.new(API_Secret.encode(), header+".".encode()+payload, hashlib.sha256) # HMACSHA256でハッシュを作成
signature = base64.urlsafe_b64encode(hashdata.digest()).replace(b'=', b'') # ハッシュをURL-Save Base64でエンコード
token = (header+".".encode()+payload+".".encode()+signature).decode()  # トークンをstrで生成

conn = http.client.HTTPSConnection("api.zoom.us")

headers = {
    'authorization': "Bearer "+token,
    'content-type': "application/json"
    }

conn.request("GET", "/v2/users?status=active&page_size=30&page_number=1", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
```
###   7.実行結果
今回はzoom.pyというファイル名で作成&実行
```py
python3 zoom.py
```
結果
```
{
    "page_count": 1,
    "page_number": 1,
    "page_size": 30,
    "total_records": 1,
    "users": [{        
    "id": "xxxxxxxxxxxxxxxx",
    "first_name": "hoge",
    "last_name": "fuga",
    "email": "hogehogehoge@gmail.com",
    "type": 1,
    "pmi": 12345678,
    "timezone": "Asia/Tokyo",
    "verified": 0, "dept": "",
    "created_at": "2020-11-19T14:09:21Z",
    "last_login_time": "2022-07-03T07:19:58Z",
    "last_client_version": "5.10.4.6592(mac)",
    "pic_url": "https://us05web.zoom.us/p/xxxxxxxxxxxxxxxx-XXx/1xx12345-1xx2-1x23-1xx2-123x45xx6789-1234",
    "language": "jp-JP",
    "phone_number": "",
    "status": "active",
    "role_id": "0"
    }]
}
```

以上。

取得した情報の活用方法については以下の記事を参考に追って記事を書きます。
https://www.cdatablog.jp/entry/2020/08/17/085924#JWT%E3%81%AB%E3%82%88%E3%82%8B%E8%AA%8D%E8%A8%BC%E6%96%B9%E6%B3%95