LINE WORKS API のトークン管理がアップデートで柔軟になりました

## LINE WORKS API のトークン管理が柔軟になった

### トークンの再発行

LINE WORKS API のアクセストークンに関するアップデートがありました。
[[リリース]アップデートおよび動作変更・提供終了予定のお知らせ(12月6日)](https://developers.worksmobile.com/jp/news/detail?id=664)

LINE WORKS API を利用するには、アクセストークンが必要です。アクセストークンは有効期限が限られているため、定期的に再発行する必要があります。

### リフレッシュトークン再発行による継続利用
従来、リフレッシュトークンを用いてアクセストークンを再発行しても、リフレッシュトークン自体は更新されませんでした。これまでは、リフレッシュトークンの有効期限は 90 日で、期限が切れると、再度認証を行う必要がありました。

今回のアップデートにより、リフレッシュトークンを用いたトークン再発行時に、**リフレッシュトークンも同時に再発行**されるようになりました。これにより、再認証の手間なく、API を継続して利用することが可能になります。

### アクセストークンの有効期限を選択可能に
また、アクセストークンの有効期限も、1 時間と 24 時間のいずれかを選択可能になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/3237594c-b31e-5f97-f708-0c39eb4f2a4e.png)

今回は、LINE WORKS の API トークン再発行を Google Colab で試して、追加された設定によるレスポンスの差異を確認してみました。

### Google Colabでトークンを再発行する

Google Colab を使用すると、ブラウザ上で Python のコードを実行できます。今回は、Google Colab 上で LINE WORKS API のトークンを再発行するスクリプトを **[こちら](https://colab.research.google.com/drive/1QCniymdYfC1eWcIb5-Sr02Jksmr__nYD?usp=sharing)** で共有しています。

この Colab ノートブックを開いて、以下の手順でトークンを再発行できます。

1. 必要な情報を入力します。
2. スクリプトを実行します。

**事前準備:**

* スクリプトを実行する前に、LINE WORKS Developer Console でアプリを作成し、`client_id`、`client_secret`、`refresh_token` を取得しておく必要があります。

### スクリプト解説

共有した Colab ノートブックでは、以下のスクリプトを使用しています。

```python
import json
import requests

# --- 必要な情報を入力 ---
client_id = "YOUR_CLIENT_ID"  # @param {type:"string"}
client_secret = "YOUR_CLIENT_SECRET"  # @param {type:"string"}
refresh_token = "YOUR_REFRESH_TOKEN"  # @param {type:"string"}

# --- Access Token 再発行のリクエスト ---
url = "[https://auth.worksmobile.com/oauth2/v2.0/token](https://auth.worksmobile.com/oauth2/v2.0/token)"
headers = {"Content-Type": "application/x-www-form-urlencoded"}
data = {
    "grant_type": "refresh_token",
    "client_id": client_id,
    "client_secret": client_secret,
    "refresh_token": refresh_token,
}

response = requests.post(url, headers=headers, data=data)

# --- レスポンスの処理 ---
if response.status_code == 200:
    response_json = response.json()
    access_token = response_json["access_token"]
    print(f"新しい Access Token: {access_token}")
    if "refresh_token" in response_json:
        new_refresh_token = response_json["refresh_token"]
        print(f"新しい Refresh Token: {new_refresh_token}")

    # response の body を整形して出力
    print("\nResponse Body:")
    print(json.dumps(response_json, indent=4))  # インデントをつけて見やすく表示

else:
    print(f"エラーが発生しました: {response.status_code} {response.text}")
```
## トークン設定によるレスポンスの違い

LINE WORKS Developer Console のトークン設定は、アクセストークンの有効期限やリフレッシュトークンの動作に影響を与えます。以下は設定ごとのレスポンスの違いを説明します。

### 設定項目

1. **`Access Token` の有効期限**
   - `1 hour`: アクセストークンの有効期限が1時間。
   - `24 hours`: アクセストークンの有効期限が24時間。

2. **`Refresh Token Rotation`**
   - **ON**:
     - アクセストークン再発行時に、新しいアクセストークンとリフレッシュトークンが発行される。
     - 最大100個のトークンが有効。それを超えたものは無効化される。
   - **OFF**:
     - アクセストークン再発行時に、新しいアクセストークンのみが発行される。
     - 新しいアクセストークンが発行されると、以前のトークンは無効化される。

---

### レスポンス例

#### ケース1: `Access Token` 有効期限が 1時間 (`1 hour`), `Refresh Token Rotation` が ON
```json
{
    "access_token": "sample_access_token_1",
    "refresh_token": "sample_refresh_token_1",
    "scope": "bot",
    "token_type": "Bearer",
    "expires_in": "3600"
}
```
#### ケース2: `Access Token` 有効期限が 24時間 (`24 hours`), `Refresh Token Rotation` が ON
```json
{
    "access_token": "sample_access_token_2",
    "refresh_token": "sample_refresh_token_2",
    "scope": "bot",
    "token_type": "Bearer",
    "expires_in": "86400"
}
```
#### ケース3: `Access Token` 有効期限が 24時間 (`24 hours`), `Refresh Token Rotation` が OFF
```json
{
    "access_token": "sample_access_token_3",
    "scope": "bot",
    "token_type": "Bearer",
    "expires_in": "86400"
}
```
まとめ

LINE WORKS API のトークン再発行が柔軟になりました。用途や、運用方針に応じた設定でトークン管理を行う事が可能です。

Google Colab で設定によるレスポンスの差異についても、共有した Colab ノートブックを使って確認することができます。

**参考資料**

  * [LINE WORKS Developers 認証](https://developers.worksmobile.com/jp/docs/auth)
  * [LINE WORKS Developers API アップデート情報](https://developers.worksmobile.com/jp/news/detail?id=664)